3 Copyright (c) 2013 The Chromium Authors. All rights reserved.
4 Use of this source code is governed by a BSD-style license that can be
5 found in the LICENSE file.
8 <link rel="import" href="/about_tracing/mock_tracing_controller_client.html">
9 <link rel="import" href="/about_tracing/profiling_view.html">
14 tvcm.unittest.testSuite(function() {
16 {name: 'a', args: {}, pid: 52, ts: 15000, cat: 'foo', tid: 53, ph: 'B'},
17 {name: 'a', args: {}, pid: 52, ts: 19000, cat: 'foo', tid: 53, ph: 'E'},
18 {name: 'b', args: {}, pid: 52, ts: 32000, cat: 'foo', tid: 53, ph: 'B'},
19 {name: 'b', args: {}, pid: 52, ts: 54000, cat: 'foo', tid: 53, ph: 'E'}
22 var monitoringOptions = {
25 useSystemTracing: false,
26 useContinuousTracing: false,
30 var ProfilingView = about_tracing.ProfilingView;
32 test('recording', function() {
33 var mock = new about_tracing.MockTracingControllerClient();
34 mock.allowLooping = true;
35 mock.expectRequest('getMonitoringStatus', function() {
36 return btoa(JSON.stringify(monitoringOptions));
38 mock.expectRequest('endRecording', function() {
41 mock.expectRequest('getCategories', function() {
42 return JSON.stringify(['a', 'b', 'c']);
44 mock.expectRequest('beginRecording', function(data) {
47 mock.expectRequest('endRecording', function(data) {
48 return JSON.stringify(testData);
51 var view = new ProfilingView(mock);
52 view.style.height = '400px';
53 view.style.border = '1px solid black';
54 this.addHTMLOutput(view);
56 return new Promise(function(resolve, reject) {
57 var recordingPromise = view.beginRecording();
58 function pressRecord() {
59 recordingPromise.selectionDlg.clickRecordButton();
60 setTimeout(pressStop, 60);
62 function pressStop() {
63 recordingPromise.progressDlg.clickStopButton();
65 setTimeout(pressRecord, 60);
66 recordingPromise.then(
76 test('monitoring', function() {
77 var mock = new about_tracing.MockTracingControllerClient();
78 mock.allowLooping = true;
79 mock.expectRequest('getMonitoringStatus', function() {
80 return btoa(JSON.stringify(monitoringOptions));
82 mock.expectRequest('beginMonitoring', function(data) {
85 mock.expectRequest('captureMonitoring', function(data) {
86 return JSON.stringify(testData);
88 mock.expectRequest('endMonitoring', function(data) {
92 var view = new ProfilingView(mock);
93 view.style.height = '400px';
94 view.style.border = '1px solid black';
95 this.addHTMLOutput(view);
97 return new Promise(function(resolve, reject) {
98 var buttons = view.querySelector('x-timeline-view-buttons');
99 assertEquals(buttons.querySelector('#monitor-checkbox').checked, false);
101 function beginMonitoring() {
102 // Since we don't fall back to TracingController when testing,
103 // we cannot rely on TracingController to invoke a callback to change
104 // view.isMonitoring_. Thus we change view.isMonitoring_ manually.
105 view.onMonitoringStateChanged_(true);
106 assertEquals(buttons.querySelector('#monitor-checkbox').checked, true);
107 setTimeout(captureMonitoring, 60);
110 function captureMonitoring() {
111 assertEquals(buttons.querySelector('#monitor-checkbox').checked, true);
112 buttons.querySelector('#capture-button').click();
113 setTimeout(endMonitoring, 60);
115 function endMonitoring() {
116 assertEquals(buttons.querySelector('#monitor-checkbox').checked, true);
117 buttons.querySelector('#monitor-checkbox').click();
118 assertEquals(buttons.querySelector('#monitor-checkbox').checked, false);
121 var monitoringPromise = view.beginMonitoring();
122 setTimeout(beginMonitoring, 60);
124 monitoringPromise.then(