Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / trace-viewer / trace_viewer / tracing / side_panel / input_latency_test.html
1 <!DOCTYPE html>
2 <!--
3 Copyright (c) 2014 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.
6 -->
7
8 <link rel="import" href="/tracing/side_panel/input_latency.html">
9 <link rel="import" href="/tracing/test_utils.html">
10 <link rel="import" href="/tracing/importer/trace_event_importer.html">
11 <link rel="import" href="/tracing/trace_model.html">
12
13 <script>
14 'use strict';
15
16 tv.unittest.testSuite(function() {
17
18   test('getLatencyData', function() {
19     var events = [];
20     for (var i = 0; i < 10; i++) {
21       var start_ts = i * 10000;
22       var end_ts = i * 10000 + 1000 * (i % 2);
23
24       // Non Input latency related slices
25       events.push({'cat' : 'benchmark', 'pid' : 3507, 'ts' : start_ts, 'ph' : 'S', 'name' : 'Test', 'id' : i}); // @suppress longLineCheck
26       events.push({'cat' : 'benchmark', 'pid' : 3507, 'ts' : end_ts, 'ph' : 'F', 'name' : 'Test', 'id' : i}); // @suppress longLineCheck
27
28       // Input latency sclices
29       events.push({'cat' : 'benchmark', 'pid' : 3507, 'ts' : start_ts, 'ph' : 'S', 'name' : 'InputLatency', 'id' : i}); // @suppress longLineCheck
30       events.push({'cat' : 'benchmark', 'pid' : 3507, 'ts' : end_ts, 'ph' : 'T', 'name' : 'InputLatency', 'args' : {'step' : 'GestureScrollUpdate'}, 'id' : i}); // @suppress longLineCheck
31       events.push({'cat' : 'benchmark', 'pid' : 3507, 'ts' : end_ts, 'ph' : 'F', 'name' : 'InputLatency', 'args' : {'data' : {'INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT' : {'time' : start_ts}, 'INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT' : {'time' : end_ts}}}, 'id' : i}); // @suppress longLineCheck
32     }
33
34     var m = new tracing.TraceModel(events);
35     var latencyData = tracing.getLatencyData(m, m.bounds);
36     assertEquals(10, latencyData.length);
37     for (var i = 0; i < latencyData.length; i++) {
38       assertEquals(i % 2, latencyData[i].latency);
39     }
40   });
41
42   test('getFrametime', function() {
43     var frame_ts;
44     var events = [];
45     // Browser process 3507
46     events.push({'cat' : '__metadata', 'pid' : 3507, 'tid' : 3507, 'ts' : 0, 'ph' : 'M', 'name' : 'thread_name', 'args' : {'name' : 'CrBrowserMain'}}); // @suppress longLineCheck
47     // Renderer process 3508
48     events.push({'cat' : '__metadata', 'pid' : 3508, 'tid' : 3508, 'ts' : 0, 'ph' : 'M', 'name' : 'thread_name', 'args' : {'name' : 'CrRendererMain'}}); // @suppress longLineCheck
49     // Renderer process 3509
50     events.push({'cat' : '__metadata', 'pid' : 3509, 'tid' : 3509, 'ts' : 0, 'ph' : 'M', 'name' : 'thread_name', 'args' : {'name' : 'CrRendererMain'}}); // @suppress longLineCheck
51
52     frame_ts = 0;
53     // Add impl rendering stats for browser process 3507
54     for (var i = 0; i < 10; i++) {
55       events.push({'cat' : 'benchmark', 'pid' : 3507, 'tid' : 3507, 'ts' : frame_ts, 'ph' : 'i', 'name' : 'BenchmarkInstrumentation::ImplThreadRenderingStats', 's' : 't'}); // @suppress longLineCheck
56       frame_ts += 16000 + 1000 * (i % 2);
57     }
58
59     frame_ts = 0;
60     // Add main rendering stats for renderer process 3508
61     for (var i = 0; i < 10; i++) {
62       events.push({'cat' : 'benchmark', 'pid' : 3508, 'tid' : 3508, 'ts' : frame_ts, 'ph' : 'i', 'name' : 'BenchmarkInstrumentation::MainThreadRenderingStats', 's' : 't'}); // @suppress longLineCheck
63       frame_ts += 16000 + 1000 * (i % 2);
64     }
65
66     frame_ts = 0;
67     // Add impl and main rendering stats for renderer process 3509
68     for (var i = 0; i < 10; i++) {
69       events.push({'cat' : 'benchmark', 'pid' : 3509, 'tid' : 3509, 'ts' : frame_ts, 'ph' : 'i', 'name' : 'BenchmarkInstrumentation::ImplThreadRenderingStats', 's' : 't'}); // @suppress longLineCheck
70       events.push({'cat' : 'benchmark', 'pid' : 3509, 'tid' : 3509, 'ts' : frame_ts, 'ph' : 'i', 'name' : 'BenchmarkInstrumentation::MainThreadRenderingStats', 's' : 't'}); // @suppress longLineCheck
71       frame_ts += 16000 + 1000 * (i % 2);
72     }
73
74     var m = new tracing.TraceModel(events);
75     var panel = new tracing.InputLatencySidePanel();
76
77     // Testing browser impl and main rendering stats.
78     var frametime_data =
79         tracing.getFrametimeData(m, 'impl_frametime_type', m.bounds, 3507);
80     assertEquals(9, frametime_data.length);
81     for (var i = 0; i < frametime_data.length; i++) {
82       assertEquals(16 + i % 2, frametime_data[i].frametime);
83     }
84     // No main rendering stats.
85     frametime_data =
86         tracing.getFrametimeData(m, 'main_frametime_type', m.bounds, 3507);
87     assertEquals(0, frametime_data.length);
88
89
90     // Testing renderer 3508 impl and main rendering stats.
91     frametime_data =
92         tracing.getFrametimeData(m, 'main_frametime_type', m.bounds, 3508);
93     assertEquals(9, frametime_data.length);
94     for (var i = 0; i < frametime_data.length; i++) {
95       assertEquals(16 + i % 2, frametime_data[i].frametime);
96     }
97     // No impl rendering stats.
98     frametime_data =
99         tracing.getFrametimeData(m, 'impl_frametime_type', m.bounds, 3508);
100     assertEquals(0, frametime_data.length);
101
102
103     // Testing renderer 3509 impl and main rendering stats.
104     frametime_data =
105         tracing.getFrametimeData(m, 'impl_frametime_type', m.bounds, 3509);
106     assertEquals(9, frametime_data.length);
107     for (var i = 0; i < frametime_data.length; i++) {
108       assertEquals(16 + i % 2, frametime_data[i].frametime);
109     }
110     frametime_data =
111         tracing.getFrametimeData(m, 'main_frametime_type', m.bounds, 3509);
112     assertEquals(9, frametime_data.length);
113     for (var i = 0; i < frametime_data.length; i++) {
114       assertEquals(16 + i % 2, frametime_data[i].frametime);
115     }
116
117   });
118
119   test('basic', function() {
120     var latencyData = [
121       {
122         x: 1000,
123         latency: 16
124       },
125       {
126         x: 2000,
127         latency: 17
128       },
129       {
130         x: 3000,
131         latency: 14
132       },
133       {
134         x: 4000,
135         latency: 23
136       }
137     ];
138     var latencyChart = tracing.createLatencyLineChart(latencyData, 'latency');
139     this.addHTMLOutput(latencyChart);
140
141     var frametimeData = [
142       {
143         x: 1000,
144         frametime: 16
145       },
146       {
147         x: 2000,
148         frametime: 17
149       },
150       {
151         x: 3000,
152         frametime: 14
153       },
154       {
155         x: 4000,
156         frametime: 23
157       }
158     ];
159     var frametimeChart = tracing.createLatencyLineChart(frametimeData,
160                                                         'frametime');
161     this.addHTMLOutput(frametimeChart);
162   });
163
164   test('brushedRangeChange', function() {
165     var events = [];
166     for (var i = 0; i < 10; i++) {
167       var start_ts = i * 10000;
168       var end_ts = start_ts + 1000 * (i % 2);
169       events.push({'cat' : 'benchmark', 'pid' : 3507, 'ts' : start_ts, 'ph' : 'S', 'name' : 'InputLatency', 'id' : i}); // @suppress longLineCheck
170       events.push({'cat' : 'benchmark', 'pid' : 3507, 'ts' : end_ts, 'ph' : 'T', 'name' : 'InputLatency', 'args' : {'step' : 'GestureScrollUpdate'}, 'id' : i}); // @suppress longLineCheck
171       events.push({'cat' : 'benchmark', 'pid' : 3507, 'ts' : end_ts, 'ph' : 'F', 'name' : 'InputLatency', 'args' : {'data' : {'INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT' : {'time' : start_ts}, 'INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT' : {'time' : end_ts}}}, 'id': i}); // @suppress longLineCheck
172     }
173
174     var panel = new tracing.InputLatencySidePanel();
175     this.addHTMLOutput(panel);
176
177     var selectionChanged = false;
178     panel.model = new tracing.TraceModel(events);
179     panel.ownerDocument.addEventListener('requestSelectionChange', function(e) {
180       selectionChanged = true;
181       assertEquals(3, e.selection.length);
182       assertEquals(20, e.selection[0].start);
183       assertEquals(31, e.selection[1].start);
184       assertEquals(40, e.selection[2].start);
185     });
186     panel.setBrushedIndices(2, 4);
187     assertTrue(selectionChanged);
188   });
189 });
190 </script>