Upstream version 9.37.197.0
[platform/framework/web/crosswalk.git] / src / third_party / trace-viewer / trace_viewer / tracing / input_latency_side_panel_test.js
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.
4
5 'use strict';
6
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');
11
12 tvcm.unittest.testSuite('tracing.input_latency_side_panel_test', function() {
13
14   test('getLatencyData', function() {
15     var events = [];
16     for (var i = 0; i < 10; i++) {
17       var start_ts = i * 10000;
18       var end_ts = i * 10000 + 1000 * (i % 2);
19
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
23
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
28     }
29
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);
35     }
36   });
37
38   test('getFrametime', function() {
39     var events = [];
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
42
43     var frame_ts = 0;
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);
47     }
48
49     var m = new tracing.TraceModel(events);
50     var panel = new tracing.InputLatencySidePanel();
51     var frametime_data =
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);
56     }
57
58   });
59
60   test('basic', function() {
61     var latencyData = [
62       {
63         x: 1000,
64         latency: 16
65       },
66       {
67         x: 2000,
68         latency: 17
69       },
70       {
71         x: 3000,
72         latency: 14
73       },
74       {
75         x: 4000,
76         latency: 23
77       }
78     ];
79     var latencyChart = tracing.createLatencyLineChart(latencyData, 'latency');
80     this.addHTMLOutput(latencyChart);
81
82     var frametimeData = [
83       {
84         x: 1000,
85         frametime: 16
86       },
87       {
88         x: 2000,
89         frametime: 17
90       },
91       {
92         x: 3000,
93         frametime: 14
94       },
95       {
96         x: 4000,
97         frametime: 23
98       }
99     ];
100     var frametimeChart = tracing.createLatencyLineChart(frametimeData,
101                                                         'frametime');
102     this.addHTMLOutput(frametimeChart);
103   });
104 });