1 // Copyright (c) 2014 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('tracing.importer.trace_event_importer');
8 tvcm.require('tracing.input_latency_side_panel');
9 tvcm.require('tracing.trace_model');
10 tvcm.require('tracing.test_utils');
12 tvcm.unittest.testSuite('tracing.input_latency_side_panel_test', function() {
14 test('getLatencyData', function() {
16 for (var i = 0; i < 10; i++) {
17 var start_ts = i * 10000;
18 var end_ts = i * 10000 + 1000 * (i % 2);
20 // Non Input latency related slices
21 events.push({'cat' : 'benchmark', 'pid' : 3507, 'ts' : start_ts, 'ph' : 'S', 'name' : 'Test', 'id' : i}); // @suppress longLineCheck
22 events.push({'cat' : 'benchmark', 'pid' : 3507, 'ts' : end_ts, 'ph' : 'F', 'name' : 'Test', 'id' : i}); // @suppress longLineCheck
24 // Input latency sclices
25 events.push({'cat' : 'benchmark', 'pid' : 3507, 'ts' : start_ts, 'ph' : 'S', 'name' : 'InputLatency', 'id' : i}); // @suppress longLineCheck
26 events.push({'cat' : 'benchmark', 'pid' : 3507, 'ts' : end_ts, 'ph' : 'T', 'name' : 'InputLatency', 'args' : {'step' : 'GestureScrollUpdate'}, 'id' : i}); // @suppress longLineCheck
27 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
30 var m = new tracing.TraceModel(events);
31 var latencyData = tracing.getLatencyData(m, m.bounds);
32 assertEquals(10, latencyData.length);
33 for (var i = 0; i < latencyData.length; i++) {
34 assertEquals(i % 2, latencyData[i].latency);
38 test('getFrametime', function() {
40 events.push({'cat' : '__metadata', 'pid' : 3507, 'tid' : 3507, 'ts' : 0, 'ph' : 'M', 'name' : 'thread_name', 'args' : {'name' : 'CrBrowserMain'}}); // @suppress longLineCheck
41 events.push({'cat' : '__metadata', 'pid' : 3507, 'tid' : 3560, 'ts' : 0, 'ph' : 'M', 'name' : 'thread_name', 'args' : {'name' : 'Chrome_InProcGpuThread'}}); // @suppress longLineCheck
44 for (var i = 0; i < 10; i++) {
45 events.push({'cat' : 'benchmark', 'pid' : 3507, 'tid' : 3507, 'ts' : frame_ts, 'ph' : 'i', 'name' : 'BenchmarkInstrumentation::MainThreadRenderingStats', 's' : 't'}); // @suppress longLineCheck
46 frame_ts += 16000 + 1000 * (i % 2);
49 var m = new tracing.TraceModel(events);
50 var panel = new tracing.InputLatencySidePanel();
52 tracing.getFrametimeData(m, panel.frametimeType, m.bounds);
53 assertEquals(9, frametime_data.length);
54 for (var i = 0; i < frametime_data.length; i++) {
55 assertEquals(16 + i % 2, frametime_data[i].frametime);
60 test('basic', function() {
79 var latencyChart = tracing.createLatencyLineChart(latencyData, 'latency');
80 this.addHTMLOutput(latencyChart);
100 var frametimeChart = tracing.createLatencyLineChart(frametimeData,
102 this.addHTMLOutput(frametimeChart);