Upstream version 9.37.197.0
[platform/framework/web/crosswalk.git] / src / third_party / trace-viewer / trace_viewer / about_tracing / profiling_view_test.js
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.
4
5 'use strict';
6
7 tvcm.require('about_tracing.mock_request_handler');
8 tvcm.require('about_tracing.profiling_view');
9
10 tvcm.unittest.testSuite('about_tracing.profiling_view_test', function() {
11
12   var testData = [
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'}
17   ];
18
19   var monitoringOptions = {
20     isMonitoring: false,
21     categoryFilter: '*',
22     useSystemTracing: false,
23     useContinuousTracing: false,
24     useSampling: false
25   };
26
27   var ProfilingView = about_tracing.ProfilingView;
28
29   test('recording', function() {
30
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));
35     });
36     mock.expectRequest('GET', '/json/end_recording', function() {
37       return '';
38     });
39     mock.expectRequest('GET', '/json/categories', function() {
40       return JSON.stringify(['a', 'b', 'c']);
41     });
42     mock.expectRequest('GET', '/json/begin_recording', function(data) {
43       return '';
44     });
45     mock.expectRequest('GET', '/json/end_recording', function(data) {
46       return JSON.stringify(testData);
47     });
48
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);
53
54     return new Promise(function(resolver) {
55       var recordingPromise = view.beginRecording();
56       function pressRecord() {
57         recordingPromise.selectionDlg.clickRecordButton();
58         setTimeout(pressStop, 60);
59       }
60       function pressStop() {
61         recordingPromise.progressDlg.clickStopButton();
62       }
63       setTimeout(pressRecord, 60);
64       recordingPromise.then(
65           function() {
66             resolver.resolve();
67           },
68           function() {
69             resolver.reject();
70           });
71     });
72   });
73
74   test('monitoring', function() {
75
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));
80     });
81     mock.expectRequest('GET', '/json/begin_monitoring', function(data) {
82       return '';
83     });
84     mock.expectRequest('GET', '/json/capture_monitoring', function(data) {
85       return JSON.stringify(testData);
86     });
87     mock.expectRequest('GET', '/json/end_monitoring', function(data) {
88       return '';
89     });
90
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);
95
96     return new Promise(function(resolver) {
97       var buttons = view.querySelector('x-timeline-view-buttons');
98       assertEquals(buttons.querySelector('#monitor-checkbox').checked, false);
99
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);
107       }
108
109       function captureMonitoring() {
110         assertEquals(buttons.querySelector('#monitor-checkbox').checked, true);
111         buttons.querySelector('#capture-button').click();
112         setTimeout(endMonitoring, 60);
113       }
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);
118       }
119
120       var monitoringPromise = view.beginMonitoring();
121       setTimeout(beginMonitoring, 60);
122
123       monitoringPromise.then(
124           resolver.resolve.bind(resolver),
125           resolver.reject.bind(resolver));
126     });
127   });
128 });