166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// Copyright (c) 2013 The Chromium Authors. All rights reserved. 266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// Use of this source code is governed by a BSD-style license that can be 366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// found in the LICENSE file. 466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis'use strict'; 666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('base.events'); 866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('about_tracing.profiling_view'); 966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('about_tracing.tracing_controller'); 1066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('ui.dom_helpers'); 1166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 1266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.unittest.testSuite('about_tracing.profiling_view', function() { 1366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var testDataString = JSON.stringify([ 1466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis {name: 'a', args: {}, pid: 52, ts: 15000, cat: 'foo', tid: 53, ph: 'B'}, 1566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis {name: 'a', args: {}, pid: 52, ts: 19000, cat: 'foo', tid: 53, ph: 'E'}, 1666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis {name: 'b', args: {}, pid: 52, ts: 32000, cat: 'foo', tid: 53, ph: 'B'}, 1766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis {name: 'b', args: {}, pid: 52, ts: 54000, cat: 'foo', tid: 53, ph: 'E'} 1866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis ]); 1966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 2066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var systemTraceTestData = [ 2166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 'systrace.sh-8170 [000] 0.013: sched_switch: ' + 2266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 'prev_comm=systrace.sh prev_pid=8170 prev_prio=120 ' + 2366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 'prev_state=x ==> next_comm=kworker/1:0 next_pid=7873 ' + 2466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 'next_prio=120', 2566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis ' kworker/1:0-7873 [000] 0.036: sched_switch: ' + 2666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 'prev_comm=kworker/1:0 prev_pid=7873 prev_prio=120 ' + 2766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 'prev_state=S ==> next_comm=debugd next_pid=4404 ' + 2866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 'next_prio=120', 2966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis ' debugd-4404 [000] 0.070: sched_switch: prev_comm=debugd ' + 3066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 'prev_pid=4404 prev_prio=120 prev_state=S ==> ' + 3166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 'next_comm=dbus-daemon next_pid=510 next_prio=120', 3266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 'systrace.sh-8182 [000] 0.000: tracing_mark_write: ' + 3366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 'trace_event_clock_sync: parent_ts=0.0' 3466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis ].join('\n'); 3566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 3666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis // This code emulates Chrome's responses to sendFn enough that the real 3766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis // tracing controller can be used to interactively test the UI. 3866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var createSendHandler = function() { 3966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var systemTraceRequested = false; 4066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var corruptTrace; 4166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var tracingController; 4266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis function send(message, opt_args) { 4366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var args = opt_args || []; 4466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis if (message == 'getKnownCategories') { 4566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis setTimeout(function() { 4666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis tracingController.onKnownCategoriesCollected(['a', 'b', 'c']); 4766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }, 1); 4866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 4966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } else if (message == 'beginTracing') { 5066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis systemTraceRequested = opt_args[0]; 5166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis continuousTraceRequested = opt_args[1]; 5266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis samplingRequested = opt_args[2]; 5366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 5466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } else if (message == 'beginRequestBufferPercentFull') { 5566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis setTimeout(function() { 5666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis tracingController.onRequestBufferPercentFullComplete(0.5); 5766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }, 1); 5866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 5966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } else if (message == 'endTracingAsync') { 6066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis setTimeout(function() { 6166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis if (systemTraceRequested) { 6266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis tracingController.onSystemTraceDataCollected(systemTraceTestData); 6366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } 6466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 6566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis // Strip off [] and add a , 6666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var n = testDataString.length - 1; 6766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var tmp = testDataString.substr(1, n - 1) + ','; 6866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis if (corruptTrace) 6966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis tmp += 'corruption'; 7066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis tracingController.onEndTracingComplete(tmp); 7166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }, 1); 7266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 7366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } else if (message == 'loadTraceFile') { 7466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis setTimeout(function() { 7566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var tmp = testDataString.substr(0); 7666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis if (corruptTrace) 7766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis tmp += 'corruption'; 7866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis tracingController.onLoadTraceFileComplete(tmp); 7966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }, 150); 8066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 8166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } else if (message == 'saveTraceFile') { 8266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis setTimeout(function() { 8366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis tracingController.onSaveTraceFileComplete(); 8466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }, 1); 8566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } 8666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } 8766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 8866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis send.__defineSetter__('tracingController', function(c) { 8966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis tracingController = c; 9066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 9166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 9266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis send.__defineSetter__('corruptTrace', function(c) { 9366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis corruptTrace = c; 9466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 9566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis return send; 9666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }; 9766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 9866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis /* 9966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis * Just enough of the TracingController to support the tests below. 10066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis */ 10166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var FakeTracingController = function() { 10266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.wasBeginTracingCalled = false; 10366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.wasCollectCategoriesCalled = false; 10466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.wasSamplingEnabled = false; 10566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }; 10666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 10766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis FakeTracingController.prototype = { 10866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis __proto__: base.EventTarget.prototype, 10966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 11066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis get supportsSystemTracing() { 11166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis return base.isChromeOS; 11266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }, 11366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 11466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beginTracing: function(opt_systemTracingEnabled, 11566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis opt_continuousTracingEnabled, 11666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis opt_enableSampling, 11766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis opt_traceCategories) { 11866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.wasBeginTracingCalled = true; 11966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.wasBeginTracingCalledWithSystemTracingEnabled = 12066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis opt_systemTracingEnabled; 12166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.wasBeginTracingCalledWithContinuousTracingEnabled = 12266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis opt_continuousTracingEnabled; 12366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.beginTracingCategories = opt_traceCategories; 12466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.wasSamplingEnabled = opt_enableSampling; 12566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }, 12666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 12766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis collectCategories: function() { 12866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.wasCollectCategoriesCalled = true; 12966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }, 13066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 13166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis get traceEventData() { 13266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis if (!this.wasBeginTracingCalled) 13366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis return undefined; 13466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis return testDataString; 13566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }, 13666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 13766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis get systemTraceEvents() { 13866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis if (!this.wasBeginTracingCalled) 13966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis return []; 14066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis if (!this.wasBeginTracingCalledWithSystemTracingEnabled) 14166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis return []; 14266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis return systemTraceTestData; 14366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }, 14466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 14566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis set tracingEnabled(val) { 14666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.isTracingEnabled_ = val; 14766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }, 14866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 14966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis get isTracingEnabled() { 15066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis if (this.isTracingEnabled_ === undefined) 15166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.isTracingEnabled_ = false; 15266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis return this.isTracingEnabled_; 15366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } 15466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }; 15566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 15666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var recordTestCommon = function() { 15766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var view = new about_tracing.ProfilingView(); 15866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 15966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var tracingController = new FakeTracingController(); 16066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.tracingController = tracingController; 16166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 16266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.querySelector('button.record').click(); 16366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertTrue(tracingController.wasCollectCategoriesCalled); 16466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 16566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var e = new base.Event('categoriesCollected'); 16666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis e.categories = ['skia', 'gpu']; 16766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis tracingController.dispatchEvent(e); 16866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 16966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.recordSelectionDialog_.querySelector( 17066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 'button.record-categories').click(); 17166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 17266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertTrue(tracingController.wasBeginTracingCalled); 17366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals(base.isChromeOS, 17466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis tracingController.wasBeginTracingCalledWithSystemTracingEnabled); 17566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 17666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var e = new base.Event('traceEnded'); 17766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis e.events = tracingController.traceEventData; 17866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis tracingController.dispatchEvent(e); 17966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 18066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertTrue(!!view.timelineView.model); 18166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.detach_(); 18266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }; 18366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 18466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('instantiate', function() { 18566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var parent = document.createElement('div'); 18666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.addHTMLOutput(parent); 18766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 18866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var view = new about_tracing.ProfilingView(); 18966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis parent.appendChild(view); 19066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 19166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var sendHandler = createSendHandler(); 19266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var tracingController = new about_tracing.TracingController(sendHandler); 19366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis sendHandler.tracingController = tracingController; 19466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis tracingController.supportsSystemTracing_ = true; 19566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 19666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.tracingController = tracingController; 19766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.focusElement = view; 19866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis parent.appendChild(ui.createCheckBox(sendHandler, 'corruptTrace', 19966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 'profilingViewTest.corruptTrace', 20066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis false, 'Make traces corrupt')); 20166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.detach_(); 20266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 20366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 20466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('selectedCategoriesSentToTracing', function() { 20566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var view = new about_tracing.ProfilingView(); 20666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.timelineView_.settings.set('cc', true, 'record_categories'); 20766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.timelineView_.settings.set('renderer', false, 'record_categories'); 20866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 20966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var tracingController = new FakeTracingController(this); 21066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.tracingController = tracingController; 21166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 21266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.querySelector('button.record').click(); 21366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertTrue(tracingController.wasCollectCategoriesCalled); 21466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 21566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var e = new base.Event('categoriesCollected'); 21666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis e.categories = ['skia', 'gpu', 'cc', 'renderer']; 21766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis tracingController.dispatchEvent(e); 21866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 21966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertVisible(view.recordSelectionDialog_); 22066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertVisible(view.recordSelectionDialog_.toolbar); 22166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 22266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.recordSelectionDialog_.querySelector('input#skia').click(); 22366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.recordSelectionDialog_.querySelector( 22466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 'button.record-categories').click(); 22566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 22666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var categories = tracingController.beginTracingCategories; 22766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis // Renderer is disabled in settings, skia is clicked off. 22866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals('-renderer,-skia', categories); 22966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 23066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.detach_(); 23166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 23266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 23366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('badCategories', function() { 23466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var view = new about_tracing.ProfilingView(); 23566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.timelineView_.settings.set('foo,bar', false, 'record_categories'); 23666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 23766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var tracingController = new FakeTracingController(this); 23866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.tracingController = tracingController; 23966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 24066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.querySelector('button.record').click(); 24166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertTrue(tracingController.wasCollectCategoriesCalled); 24266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 24366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var e = new base.Event('categoriesCollected'); 24466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis e.categories = ['baz,zap', 'gpu']; 24566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis tracingController.dispatchEvent(e); 24666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 24766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.recordSelectionDialog_.querySelector( 24866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 'button.record-categories').click(); 24966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 25066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var inputs = view.recordSelectionDialog_.querySelectorAll('input'); 25166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var inputs_length = inputs.length; 25266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis for (var i = 0; i < inputs_length; ++i) { 25366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis // Comes from categories and should be split before getting 25466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis // to the record selection dialog. 25566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertNotEquals('baz,zap', inputs[i].id); 25666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } 25766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var categories = tracingController.beginTracingCategories; 25866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals('', categories); 25966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 26066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.detach_(); 26166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 26266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 26366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('recordNonCros', function() { 26466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var old = base.isChromeOS; 26566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis base.isChromeOS = false; 26666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis try { 26766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis recordTestCommon(); 26866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } finally { 26966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis base.isChromeOS = old; 27066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } 27166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 27266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 27366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('recordCros', function() { 27466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var old = base.isChromeOS; 27566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis base.isChromeOS = true; 27666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis try { 27766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis recordTestCommon(); 27866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } finally { 27966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis base.isChromeOS = old; 28066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } 28166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 28266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 28366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('recordWithTraceRunning_KeyEvent', function() { 28466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var view = new about_tracing.ProfilingView(); 28566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var tracingController = new FakeTracingController(); 28666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis tracingController.tracingEnabled = true; 28766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.tracingController = tracingController; 28866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 28966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var evt = document.createEvent('Event'); 29066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis evt.initEvent('keypress', 29166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis true, // canBubbleArg 29266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis true, // cancelableArg 29366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis window); // viewArg 29466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis evt.keyCode = 'r'.charCodeAt(0); 29566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 29666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis document.dispatchEvent(evt); 29766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertFalse(tracingController.wasCollectCategoriesCalled); 29866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 29966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.detach_(); 30066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 30166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 30266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('categorySelectionWithTraceRunning_KeyEvent', function() { 30366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var view = new about_tracing.ProfilingView(); 30466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var tracingController = new FakeTracingController(); 30566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.tracingController = tracingController; 30666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.selectingCategories = true; 30766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 30866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var evt = document.createEvent('Event'); 30966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis evt.initEvent('keypress', 31066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis true, // canBubbleArg 31166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis true, // cancelableArg 31266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis window); // viewArg 31366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis evt.keyCode = 'r'.charCodeAt(0); 31466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 31566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis document.dispatchEvent(evt); 31666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertFalse(tracingController.wasCollectCategoriesCalled); 31766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 31866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.detach_(); 31966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 32066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 32166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('categorySelectionSetsSelectingCategories', function() { 32266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var view = new about_tracing.ProfilingView(); 32366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var tracingController = new FakeTracingController(); 32466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.tracingController = tracingController; 32566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.selectingCategories = false; 32666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 32766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.querySelector('button.record').click(); 32866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertTrue(view.selectingCategories); 32966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 33066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var e = new base.Event('categoriesCollected'); 33166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis e.categories = ['skia', 'gpu', 'cc', 'renderer']; 33266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis tracingController.dispatchEvent(e); 33366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 33466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.recordSelectionDialog_.querySelector( 33566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 'button.record-categories').click(); 33666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 33766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertFalse(view.selectingCategories); 33866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.detach_(); 33966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 34066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 34166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('categorySelectionResetsSelectingCategoriesOnDialogDismiss', function() { 34266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var view = new about_tracing.ProfilingView(); 34366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var tracingController = new FakeTracingController(); 34466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.tracingController = tracingController; 34566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.selectingCategories = false; 34666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 34766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.querySelector('button.record').click(); 34866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertTrue(view.selectingCategories); 34966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 35066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var e = new base.Event('categoriesCollected'); 35166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis e.categories = ['skia', 'gpu', 'cc', 'renderer']; 35266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis tracingController.dispatchEvent(e); 35366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 35466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.recordSelectionDialog_.visible = false; 35566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 35666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertFalse(view.selectingCategories); 35766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.detach_(); 35866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 35966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 36066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('recording_withSamplingEnabled', function() { 36166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var view = new about_tracing.ProfilingView(); 36266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 36366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var tracingController = new FakeTracingController(); 36466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.tracingController = tracingController; 36566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.querySelector('button.record').click(); 36666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 36766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var e = new base.Event('categoriesCollected'); 36866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis e.categories = []; 36966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis tracingController.dispatchEvent(e); 37066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 37166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.recordSelectionDialog_.querySelector('.sampling-button').click(); 37266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.recordSelectionDialog_.querySelector( 37366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 'button.record-categories').click(); 37466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 37566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertTrue(tracingController.wasBeginTracingCalled); 37666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertTrue(tracingController.wasSamplingEnabled); 37766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 37866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 37966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('recording_withSamplingDisabled', function() { 38066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var view = new about_tracing.ProfilingView(); 38166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 38266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var tracingController = new FakeTracingController(); 38366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.tracingController = tracingController; 38466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.querySelector('button.record').click(); 38566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 38666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var e = new base.Event('categoriesCollected'); 38766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis e.categories = []; 38866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis tracingController.dispatchEvent(e); 38966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 39066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis view.recordSelectionDialog_.querySelector( 39166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 'button.record-categories').click(); 39266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 39366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertTrue(tracingController.wasBeginTracingCalled); 39466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertFalse(tracingController.wasSamplingEnabled); 39566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 39666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis}); 397