1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
7 tvcm.require('about_tracing.mock_request_handler');
8 tvcm.require('about_tracing.profiling_view');
10 tvcm.unittest.testSuite('about_tracing.profiling_view_test', function() {
13 {name: 'a', args: {}, pid: 52, ts: 15000, cat: 'foo', tid: 53, ph: 'B'},
14 {name: 'a', args: {}, pid: 52, ts: 19000, cat: 'foo', tid: 53, ph: 'E'},
15 {name: 'b', args: {}, pid: 52, ts: 32000, cat: 'foo', tid: 53, ph: 'B'},
16 {name: 'b', args: {}, pid: 52, ts: 54000, cat: 'foo', tid: 53, ph: 'E'}
19 var monitoringOptions = {
22 useSystemTracing: false,
23 useContinuousTracing: false,
27 var ProfilingView = about_tracing.ProfilingView;
29 test('recording', function() {
31 var mock = new about_tracing.MockRequestHandler();
32 mock.allowLooping = true;
33 mock.expectRequest('GET', '/json/get_monitoring_status', function() {
34 return btoa(JSON.stringify(monitoringOptions));
36 mock.expectRequest('GET', '/json/end_recording', function() {
39 mock.expectRequest('GET', '/json/categories', function() {
40 return JSON.stringify(['a', 'b', 'c']);
42 mock.expectRequest('GET', '/json/begin_recording', function(data) {
45 mock.expectRequest('GET', '/json/end_recording', function(data) {
46 return JSON.stringify(testData);
49 var view = new ProfilingView(mock.tracingRequest.bind(mock));
50 view.style.height = '400px';
51 view.style.border = '1px solid black';
52 this.addHTMLOutput(view);
54 return new Promise(function(resolver) {
55 var recordingPromise = view.beginRecording();
56 function pressRecord() {
57 recordingPromise.selectionDlg.clickRecordButton();
58 setTimeout(pressStop, 60);
60 function pressStop() {
61 recordingPromise.progressDlg.clickStopButton();
63 setTimeout(pressRecord, 60);
64 recordingPromise.then(
74 test('monitoring', function() {
76 var mock = new about_tracing.MockRequestHandler();
77 mock.allowLooping = true;
78 mock.expectRequest('GET', '/json/get_monitoring_status', function() {
79 return btoa(JSON.stringify(monitoringOptions));
81 mock.expectRequest('GET', '/json/begin_monitoring', function(data) {
84 mock.expectRequest('GET', '/json/capture_monitoring', function(data) {
85 return JSON.stringify(testData);
87 mock.expectRequest('GET', '/json/end_monitoring', function(data) {
91 var view = new ProfilingView(mock.tracingRequest.bind(mock));
92 view.style.height = '400px';
93 view.style.border = '1px solid black';
94 this.addHTMLOutput(view);
96 return new Promise(function(resolver) {
97 var buttons = view.querySelector('x-timeline-view-buttons');
98 assertEquals(buttons.querySelector('#monitor-checkbox').checked, false);
100 function beginMonitoring() {
101 // Since we don't fall back to TracingController when testing,
102 // we cannot rely on TracingController to invoke a callback to change
103 // view.isMonitoring_. Thus we change view.isMonitoring_ manually.
104 view.onMonitoringStateChanged_(true);
105 assertEquals(buttons.querySelector('#monitor-checkbox').checked, true);
106 setTimeout(captureMonitoring, 60);
109 function captureMonitoring() {
110 assertEquals(buttons.querySelector('#monitor-checkbox').checked, true);
111 buttons.querySelector('#capture-button').click();
112 setTimeout(endMonitoring, 60);
114 function endMonitoring() {
115 assertEquals(buttons.querySelector('#monitor-checkbox').checked, true);
116 buttons.querySelector('#monitor-checkbox').click();
117 assertEquals(buttons.querySelector('#monitor-checkbox').checked, false);
120 var monitoringPromise = view.beginMonitoring();
121 setTimeout(beginMonitoring, 60);
123 monitoringPromise.then(
124 resolver.resolve.bind(resolver),
125 resolver.reject.bind(resolver));