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.
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">
16 tv.unittest.testSuite(function() {
18 test('getLatencyData', function() {
20 for (var i = 0; i < 10; i++) {
21 var start_ts = i * 10000;
22 var end_ts = i * 10000 + 1000 * (i % 2);
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
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
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);
42 test('getFrametime', function() {
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
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);
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);
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);
74 var m = new tracing.TraceModel(events);
75 var panel = new tracing.InputLatencySidePanel();
77 // Testing browser impl and main rendering stats.
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);
84 // No main rendering stats.
86 tracing.getFrametimeData(m, 'main_frametime_type', m.bounds, 3507);
87 assertEquals(0, frametime_data.length);
90 // Testing renderer 3508 impl and main rendering stats.
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);
97 // No impl rendering stats.
99 tracing.getFrametimeData(m, 'impl_frametime_type', m.bounds, 3508);
100 assertEquals(0, frametime_data.length);
103 // Testing renderer 3509 impl and main rendering stats.
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);
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);
119 test('basic', function() {
138 var latencyChart = tracing.createLatencyLineChart(latencyData, 'latency');
139 this.addHTMLOutput(latencyChart);
141 var frametimeData = [
159 var frametimeChart = tracing.createLatencyLineChart(frametimeData,
161 this.addHTMLOutput(frametimeChart);
164 test('brushedRangeChange', function() {
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
174 var panel = new tracing.InputLatencySidePanel();
175 this.addHTMLOutput(panel);
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);
186 panel.setBrushedIndices(2, 4);
187 assertTrue(selectionChanged);