<!DOCTYPE HTML> <html> <!-- Copyright (c) 2012 The Chromium Authors. All rights reserved. Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. --> <head i18n-values="dir:textdirection;"> <title>ProfilingView tests</title> <link rel="stylesheet" href="profiling_view.css"> <link rel="stylesheet" href="timeline_view.css"> <link rel="stylesheet" href="overlay.css"> <link rel="stylesheet" href="timeline_analysis.css"> <link rel="stylesheet" href="timeline.css"> <link rel="stylesheet" href="../shared/css/tabs.css"> <script src="http://closure-library.googlecode.com/svn/trunk/closure/goog/base.js"></script> <script src="../shared/js/cr.js"></script> <script src="../shared/js/cr/event_target.js"></script> <script src="../shared/js/cr/ui.js"></script> <script src="../shared/js/cr/ui/tabs.js"></script> <script src="overlay.js"></script> <script src="measuring_stick.js"></script> <script src="profiling_view.js"></script> <script src="timeline_analysis.js"></script> <script src="timeline_view.js"></script> <script src="timeline_model.js"></script> <script src="linux_perf_importer.js"></script> <script src="trace_event_importer.js"></script> <script src="timeline.js"></script> <script src="timeline_track.js"></script> <script src="sorted_array_utils.js"></script> <script src="fast_rect_renderer.js"></script> <script src="test_utils.js"></script> <script> goog.require('goog.testing.jsunit'); </script> <style> .profiling-view { border: 1px solid black; } </style> </head> <body> <script> 'use strict'; /* * Just enough of the TracingController to support the tests below. */ function FakeTracingController() { } FakeTracingController.prototype = { __proto__: cr.EventTarget.prototype, beginTracing: function(opt_systemTracingEnabled) { this.wasBeginTracingCalled = true; this.wasBeginTracingCalledWithSystemTracingEnabled = opt_systemTracingEnabled; }, get traceEvents() { if (!this.wasBeginTracingCalled) return undefined; return FakeTracingController.testData; }, get systemTraceEvents() { if (!this.wasBeginTracingCalled) return []; if (!this.wasBeginTracingCalledWithSystemTracingEnabled) return []; return FakeTracingController.systemTraceTestData; } }; FakeTracingController.testData = [ {name: 'a', args: {}, pid: 52, ts: 520, cat: 'foo', tid: 53, ph: 'B'}, {name: 'a', args: {}, pid: 52, ts: 560, cat: 'foo', tid: 53, ph: 'E'}, {name: 'b', args: {}, pid: 52, ts: 629, cat: 'foo', tid: 53, ph: 'B'}, {name: 'b', args: {}, pid: 52, ts: 631, cat: 'foo', tid: 53, ph: 'E'} ]; FakeTracingController.systemTraceTestData = [ 'systrace.sh-8170 [001] 15180.978813: sched_switch: ' + 'prev_comm=systrace.sh prev_pid=8170 prev_prio=120 ' + 'prev_state=x ==> next_comm=kworker/1:0 next_pid=7873 ' + 'next_prio=120', ' kworker/1:0-7873 [001] 15180.978836: sched_switch: ' + 'prev_comm=kworker/1:0 prev_pid=7873 prev_prio=120 ' + 'prev_state=S ==> next_comm=debugd next_pid=4404 next_prio=120', ' debugd-4404 [001] 15180.979010: sched_switch: prev_comm=debugd ' + 'prev_pid=4404 prev_prio=120 prev_state=S ==> ' + 'next_comm=dbus-daemon next_pid=510 next_prio=120', 'systrace.sh-8182 [000] 15186.203900: tracing_mark_write: ' + 'trace_event_clock_sync: parent_ts=0.0' ].join('\n'); /* This test just instantiates a ProflingView and adds it to the DOM * to help with non-unittest UI work. */ function testInstantiate() { var view = new tracing.ProfilingView(); view.tracingController = new FakeTracingController(); view.focusElement = view; document.body.appendChild(view); } function recordTestCommon() { var view = new tracing.ProfilingView(); var tracingController = new FakeTracingController() view.tracingController = tracingController; view.querySelector('button.record').click(); assertTrue(tracingController.wasBeginTracingCalled); assertEquals(cr.isChromeOS, tracingController.wasBeginTracingCalledWithSystemTracingEnabled); var e = new cr.Event('traceEnded'); var didRefresh = false; e.events = tracingController.traceEvents; tracingController.dispatchEvent(e); assertTrue(!!view.timelineView.model); } function testRecordNonCros() { var old = cr.isChromeOS; cr.isChromeOS = false; try { recordTestCommon(); } finally { cr.isChromeOS = old; } } function testRecordCros() { var old = cr.isChromeOS; cr.isChromeOS = true; try { recordTestCommon(); } finally { cr.isChromeOS = old; } } </script> </body> </html>