Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(507)

Side by Side Diff: perf_insights/perf_insights/timeline_based_measurement/rendering_frame_test.html

Issue 1685683003: Implement Timeline Based Measurement v2 (Closed) Base URL: git@github.com:catapult-project/catapult.git@new_style_results
Patch Set: fix vinn tests Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 <!DOCTYPE html>
2 <!--
3 Copyright (c) 2015 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"
9 href="/perf_insights/timeline_based_measurement/rendering_frame.html">
10
11 <link rel="import" href="/tracing/base/range.html">
12 <link rel="import" href="/tracing/base/statistics.html">
13 <link rel="import" href="/tracing/core/test_utils.html">
14 <link rel="import" href="/tracing/extras/chrome/cc/constants.html">
15 <link rel="import" href="/tracing/extras/chrome/chrome_test_utils.html">
16 <link rel="import" href="/tracing/model/model.html">
17
18 <script>
19 'use strict';
20
21 tr.b.unittest.testSuite(function() {
22
23 var ThreadSlice = tr.model.ThreadSlice;
24 var RenderingFrame = pi.tbm.RenderingFrame;
25 var SEND_BEGIN_FRAME_EVENT = tr.e.cc.constants.SEND_BEGIN_FRAME_EVENT;
26 var BEGIN_MAIN_FRAME_EVENT = tr.e.cc.constants.BEGIN_MAIN_FRAME_EVENT;
27 var Range = tr.b.Range;
28
29 function RenderingFrameTestData() {
30 this.beginFrameId_ = 0;
31 this.events_ = [];
32 this.rendererProcess_ = (new tr.Model()).getOrCreateProcess(1);
33 this.mainThread_ = this.rendererProcess_.getOrCreateThread(11);
34 this.compositorThread_ = this.rendererProcess_.getOrCreateThread(12);
35 }
36
37 RenderingFrameTestData.prototype = {
38 get events() {
39 return this.events_;
40 },
41
42 get rendererProcess() {
43 return this.rendererProcess_;
44 },
45
46 get compositorThread() {
47 return this.compositorThread_;
48 },
49
50 addSendEvent: function(opt_ts, opt_duration) {
51 if (opt_ts === undefined)
52 opt_ts = 0;
53 if (opt_duration === undefined)
54 opt_duration = 1;
55 this.beginFrameId_ += 1;
56 var event = this.createEvent_(
57 SEND_BEGIN_FRAME_EVENT, opt_ts, opt_duration);
58 this.compositorThread_.sliceGroup.pushSlice(event);
59 },
60
61 addBeginMainFrameEvent: function(opt_ts, opt_duration) {
62 if (opt_ts === undefined)
63 opt_ts = 0;
64 if (opt_duration === undefined)
65 opt_duration = 1;
66 var event = this.createEvent_(
67 BEGIN_MAIN_FRAME_EVENT, opt_ts, opt_duration);
68 this.mainThread_.sliceGroup.pushSlice(event);
69 },
70
71 updateBounds: function() {
72 this.rendererProcess_.updateBounds();
73 },
74
75 createEvent_: function(eventTitle, ts, duration) {
76 var event = new ThreadSlice('cc,benchmark', eventTitle, 0, ts, {
77 'begin_frame_id': this.beginFrameId_
78 }, duration);
79 this.events_.push(event);
80 return event;
81 }
82 };
83
84 function generateTimelineRange(opt_start, opt_end) {
85 if (opt_start === undefined)
86 opt_start = 0;
87 if (opt_end === undefined)
88 opt_end = 100;
89 var timelineRange = new tr.b.Range();
90 timelineRange.min = opt_start;
91 timelineRange.max = opt_end;
92 return timelineRange;
93 }
94
95 test('renderingFrameConstruction', function() {
96 var r = new RenderingFrameTestData();
97 r.addSendEvent(10);
98 r.addBeginMainFrameEvent(20);
99 r.updateBounds();
100 var frames = RenderingFrame.getFrameEventsInsideRange(
101 r.rendererProcess, Range.fromExplicitRange(0, 30));
102 assert.equal(1, frames.length);
103 assert.equal(10, frames[0].queueDuration);
104 });
105
106 test('renderingFrame_missingSendBeginFrameEvents', function() {
107 var r = new RenderingFrameTestData();
108 r.addBeginMainFrameEvent(10);
109 r.updateBounds();
110 var frames = RenderingFrame.getFrameEventsInsideRange(
111 r.rendererProcess, Range.fromExplicitRange(0, 30));
112 assert.equal(0, frames.length);
113 });
114
115 test('renderingFrame_duplicateSendBeginFrameEvents', function() {
116 var r = new RenderingFrameTestData();
117 r.addSendEvent(10);
118 r.addBeginMainFrameEvent(20);
119 var begin_frame_id = r.events[0].args['begin_frame_id'];
120 r.compositorThread.sliceGroup.pushSlice(new ThreadSlice(
121 'cc,benchmark', SEND_BEGIN_FRAME_EVENT, 0, 30,
122 {'begin_frame_id': begin_frame_id}, 0));
123 r.updateBounds();
124 var frames = RenderingFrame.getFrameEventsInsideRange(
125 r.rendererProcess, Range.fromExplicitRange(0, 30));
126 assert.equal(0, frames.length);
127 });
128
129 test('renderingFrame_missingBeginMainFrameEvents', function() {
130 var r = new RenderingFrameTestData();
131 r.addSendEvent(10);
132 r.updateBounds();
133 var frames = RenderingFrame.getFrameEventsInsideRange(
134 r.rendererProcess, Range.fromExplicitRange(0, 30));
135 assert.equal(0, frames.length);
136 });
137
138 test('renderingFrame_duplicateBeginMainFrameEvents', function() {
139 var r = new RenderingFrameTestData();
140 r.addSendEvent(10);
141 r.addBeginMainFrameEvent(20);
142 r.addBeginMainFrameEvent(30);
143 r.addBeginMainFrameEvent(40);
144 r.updateBounds();
145
146 var frames = RenderingFrame.getFrameEventsInsideRange(
147 r.rendererProcess, Range.fromExplicitRange(0, 30));
148 assert.equal(1, frames.length);
149 assert.equal(30, frames[0].queueDuration);
150 });
151
152 test('renderingFrame_frameEventMissingBeginFrameId', function() {
153 var model = new tr.Model();
154 var process = model.getOrCreateProcess(1);
155 var main_thread = process.getOrCreateThread(11);
156 var model_range = {};
157
158 // Create an event without the begin_frame_id argument
159 var event = new ThreadSlice(
160 'cc,benchmark', BEGIN_MAIN_FRAME_EVENT, 0, 0.0);
161 main_thread.sliceGroup.pushSlice(event);
162 process.updateBounds();
163 try {
164 RenderingFrame.getFrameEventsInsideRange(process, model_range);
165 assert.isFalse(true, 'Exception should have been thrown');
166 } catch (err) {
167 assert.equal(true, true);
168 }
169 });
170
171 /**
172 * Test a basic sequenece, with expected frame queueing delays A and B.
173 *
174 * |----A----| |--B--|
175 * Main: [1] [1] [2]
176 *
177 * Compositor: [1] [2]
178 **/
179 test('renderingFrame_getFrameEventsInsideRange', function() {
180 var r = new RenderingFrameTestData();
181 r.addSendEvent(10);
182 r.addBeginMainFrameEvent(20);
183 r.addBeginMainFrameEvent(30);
184 r.addSendEvent(40);
185 r.addBeginMainFrameEvent(50);
186 r.updateBounds();
187
188 var timelineRange = generateTimelineRange();
189 var frameEvents = RenderingFrame.getFrameEventsInsideRange(
190 r.rendererProcess, timelineRange);
191
192 assert.equal(2, frameEvents.length);
193 assert.equal(20, frameEvents[0].queueDuration);
194 assert.equal(10, frameEvents[1].queueDuration);
195 });
196
197 /**
198 * Test a sequenece missing an initial SendBeginFrame.
199 *
200 * Only one frame should be returned, with expected frame queueing delay A.
201 * |--A--|
202 * Main: [0] [0] [2]
203 *
204 * Compositor: [2]
205 **/
206 test('renderingFrame_frameEventsMissingDataNotIncluded', function() {
207 var r = new RenderingFrameTestData();
208 r.addBeginMainFrameEvent(20);
209 r.addBeginMainFrameEvent(30);
210 r.addSendEvent(40);
211 r.addBeginMainFrameEvent(50);
212 r.updateBounds();
213
214 var timelineRange = generateTimelineRange();
215 var frameEvents = RenderingFrame.getFrameEventsInsideRange(
216 r.rendererProcess, timelineRange);
217
218 assert.equal(1, frameEvents.length);
219 assert.equal(10, frameEvents[0].queueDuration);
220 });
221
222 });
223 </script>
OLDNEW
« no previous file with comments | « perf_insights/perf_insights/timeline_based_measurement/rendering_frame.html ('k') | telemetry/telemetry/value/__init__.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698