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

Side by Side Diff: cc/scheduler/compositor_timing_history_unittest.cc

Issue 1681393003: cc: Add MainAndImplFrameTimeDelta UMA. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: - active_tree_needs_first_draw_ = true Created 4 years, 10 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
« no previous file with comments | « cc/scheduler/compositor_timing_history.cc ('k') | cc/scheduler/scheduler.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/scheduler/compositor_timing_history.h" 5 #include "cc/scheduler/compositor_timing_history.h"
6 6
7 #include "base/macros.h" 7 #include "base/macros.h"
8 #include "cc/debug/rendering_stats_instrumentation.h" 8 #include "cc/debug/rendering_stats_instrumentation.h"
9 #include "testing/gtest/include/gtest/gtest.h" 9 #include "testing/gtest/include/gtest/gtest.h"
10 10
11 namespace cc { 11 namespace cc {
12 namespace { 12 namespace {
13 13
14 class CompositorTimingHistoryTest; 14 class CompositorTimingHistoryTest;
15 15
16 class TestCompositorTimingHistory : public CompositorTimingHistory { 16 class TestCompositorTimingHistory : public CompositorTimingHistory {
17 public: 17 public:
18 TestCompositorTimingHistory(CompositorTimingHistoryTest* test, 18 TestCompositorTimingHistory(CompositorTimingHistoryTest* test,
19 RenderingStatsInstrumentation* rendering_stats) 19 RenderingStatsInstrumentation* rendering_stats)
20 : CompositorTimingHistory(NULL_UMA, rendering_stats), test_(test) {} 20 : CompositorTimingHistory(false, NULL_UMA, rendering_stats),
21 test_(test) {}
21 22
22 protected: 23 protected:
23 base::TimeTicks Now() const override; 24 base::TimeTicks Now() const override;
24 25
25 CompositorTimingHistoryTest* test_; 26 CompositorTimingHistoryTest* test_;
26 27
27 private: 28 private:
28 DISALLOW_COPY_AND_ASSIGN(TestCompositorTimingHistory); 29 DISALLOW_COPY_AND_ASSIGN(TestCompositorTimingHistory);
29 }; 30 };
30 31
(...skipping 30 matching lines...) Expand all
61 base::TimeDelta begin_main_frame_start_to_commit_duration = 62 base::TimeDelta begin_main_frame_start_to_commit_duration =
62 base::TimeDelta::FromMilliseconds(1); 63 base::TimeDelta::FromMilliseconds(1);
63 base::TimeDelta prepare_tiles_duration = base::TimeDelta::FromMilliseconds(2); 64 base::TimeDelta prepare_tiles_duration = base::TimeDelta::FromMilliseconds(2);
64 base::TimeDelta prepare_tiles_end_to_ready_to_activate_duration = 65 base::TimeDelta prepare_tiles_end_to_ready_to_activate_duration =
65 base::TimeDelta::FromMilliseconds(1); 66 base::TimeDelta::FromMilliseconds(1);
66 base::TimeDelta commit_to_ready_to_activate_duration = 67 base::TimeDelta commit_to_ready_to_activate_duration =
67 base::TimeDelta::FromMilliseconds(3); 68 base::TimeDelta::FromMilliseconds(3);
68 base::TimeDelta activate_duration = base::TimeDelta::FromMilliseconds(4); 69 base::TimeDelta activate_duration = base::TimeDelta::FromMilliseconds(4);
69 base::TimeDelta draw_duration = base::TimeDelta::FromMilliseconds(5); 70 base::TimeDelta draw_duration = base::TimeDelta::FromMilliseconds(5);
70 71
71 timing_history_.WillBeginMainFrame(true); 72 timing_history_.WillBeginMainFrame(true, Now());
72 AdvanceNowBy(begin_main_frame_queue_duration); 73 AdvanceNowBy(begin_main_frame_queue_duration);
73 timing_history_.BeginMainFrameStarted(Now()); 74 timing_history_.BeginMainFrameStarted(Now());
74 AdvanceNowBy(begin_main_frame_start_to_commit_duration); 75 AdvanceNowBy(begin_main_frame_start_to_commit_duration);
75 timing_history_.DidCommit(); 76 timing_history_.DidCommit();
76 timing_history_.WillPrepareTiles(); 77 timing_history_.WillPrepareTiles();
77 AdvanceNowBy(prepare_tiles_duration); 78 AdvanceNowBy(prepare_tiles_duration);
78 timing_history_.DidPrepareTiles(); 79 timing_history_.DidPrepareTiles();
79 AdvanceNowBy(prepare_tiles_end_to_ready_to_activate_duration); 80 AdvanceNowBy(prepare_tiles_end_to_ready_to_activate_duration);
80 timing_history_.ReadyToActivate(); 81 timing_history_.ReadyToActivate();
81 // Do not count idle time between notification and actual activation. 82 // Do not count idle time between notification and actual activation.
82 AdvanceNowBy(one_second); 83 AdvanceNowBy(one_second);
83 timing_history_.WillActivate(); 84 timing_history_.WillActivate();
84 AdvanceNowBy(activate_duration); 85 AdvanceNowBy(activate_duration);
85 timing_history_.DidActivate(); 86 timing_history_.DidActivate();
86 // Do not count idle time between activate and draw. 87 // Do not count idle time between activate and draw.
87 AdvanceNowBy(one_second); 88 AdvanceNowBy(one_second);
88 timing_history_.WillDraw(); 89 timing_history_.WillDraw();
89 AdvanceNowBy(draw_duration); 90 AdvanceNowBy(draw_duration);
90 timing_history_.DidDraw(true); 91 timing_history_.DidDraw(true, true, Now());
91 92
92 EXPECT_EQ(begin_main_frame_queue_duration, 93 EXPECT_EQ(begin_main_frame_queue_duration,
93 timing_history_.BeginMainFrameQueueDurationCriticalEstimate()); 94 timing_history_.BeginMainFrameQueueDurationCriticalEstimate());
94 EXPECT_EQ(begin_main_frame_queue_duration, 95 EXPECT_EQ(begin_main_frame_queue_duration,
95 timing_history_.BeginMainFrameQueueDurationNotCriticalEstimate()); 96 timing_history_.BeginMainFrameQueueDurationNotCriticalEstimate());
96 97
97 EXPECT_EQ(begin_main_frame_start_to_commit_duration, 98 EXPECT_EQ(begin_main_frame_start_to_commit_duration,
98 timing_history_.BeginMainFrameStartToCommitDurationEstimate()); 99 timing_history_.BeginMainFrameStartToCommitDurationEstimate());
99 100
100 base::TimeDelta begin_main_frame_to_commit_duration_expected_ = 101 base::TimeDelta begin_main_frame_to_commit_duration_expected_ =
(...skipping 18 matching lines...) Expand all
119 base::TimeDelta begin_main_frame_start_to_commit_duration = 120 base::TimeDelta begin_main_frame_start_to_commit_duration =
120 base::TimeDelta::FromMilliseconds(1); 121 base::TimeDelta::FromMilliseconds(1);
121 base::TimeDelta prepare_tiles_duration = base::TimeDelta::FromMilliseconds(2); 122 base::TimeDelta prepare_tiles_duration = base::TimeDelta::FromMilliseconds(2);
122 base::TimeDelta prepare_tiles_end_to_ready_to_activate_duration = 123 base::TimeDelta prepare_tiles_end_to_ready_to_activate_duration =
123 base::TimeDelta::FromMilliseconds(1); 124 base::TimeDelta::FromMilliseconds(1);
124 base::TimeDelta commit_to_ready_to_activate_duration = 125 base::TimeDelta commit_to_ready_to_activate_duration =
125 base::TimeDelta::FromMilliseconds(3); 126 base::TimeDelta::FromMilliseconds(3);
126 base::TimeDelta activate_duration = base::TimeDelta::FromMilliseconds(4); 127 base::TimeDelta activate_duration = base::TimeDelta::FromMilliseconds(4);
127 base::TimeDelta draw_duration = base::TimeDelta::FromMilliseconds(5); 128 base::TimeDelta draw_duration = base::TimeDelta::FromMilliseconds(5);
128 129
129 timing_history_.WillBeginMainFrame(true); 130 timing_history_.WillBeginMainFrame(false, Now());
130 AdvanceNowBy(begin_main_frame_queue_duration); 131 AdvanceNowBy(begin_main_frame_queue_duration);
131 timing_history_.BeginMainFrameStarted(Now()); 132 timing_history_.BeginMainFrameStarted(Now());
132 AdvanceNowBy(begin_main_frame_start_to_commit_duration); 133 AdvanceNowBy(begin_main_frame_start_to_commit_duration);
133 // BeginMainFrameAborted counts as a commit complete. 134 // BeginMainFrameAborted counts as a commit complete.
134 timing_history_.BeginMainFrameAborted(); 135 timing_history_.BeginMainFrameAborted();
135 timing_history_.WillPrepareTiles(); 136 timing_history_.WillPrepareTiles();
136 AdvanceNowBy(prepare_tiles_duration); 137 AdvanceNowBy(prepare_tiles_duration);
137 timing_history_.DidPrepareTiles(); 138 timing_history_.DidPrepareTiles();
138 AdvanceNowBy(prepare_tiles_end_to_ready_to_activate_duration); 139 AdvanceNowBy(prepare_tiles_end_to_ready_to_activate_duration);
139 timing_history_.ReadyToActivate(); 140 timing_history_.ReadyToActivate();
140 // Do not count idle time between notification and actual activation. 141 // Do not count idle time between notification and actual activation.
141 AdvanceNowBy(one_second); 142 AdvanceNowBy(one_second);
142 timing_history_.WillActivate(); 143 timing_history_.WillActivate();
143 AdvanceNowBy(activate_duration); 144 AdvanceNowBy(activate_duration);
144 timing_history_.DidActivate(); 145 timing_history_.DidActivate();
145 // Do not count idle time between activate and draw. 146 // Do not count idle time between activate and draw.
146 AdvanceNowBy(one_second); 147 AdvanceNowBy(one_second);
147 timing_history_.WillDraw(); 148 timing_history_.WillDraw();
148 AdvanceNowBy(draw_duration); 149 AdvanceNowBy(draw_duration);
149 timing_history_.DidDraw(true); 150 timing_history_.DidDraw(false, false, Now());
150 151
151 EXPECT_EQ(begin_main_frame_queue_duration, 152 EXPECT_EQ(base::TimeDelta(),
152 timing_history_.BeginMainFrameQueueDurationCriticalEstimate()); 153 timing_history_.BeginMainFrameQueueDurationCriticalEstimate());
153 EXPECT_EQ(begin_main_frame_queue_duration, 154 EXPECT_EQ(begin_main_frame_queue_duration,
154 timing_history_.BeginMainFrameQueueDurationNotCriticalEstimate()); 155 timing_history_.BeginMainFrameQueueDurationNotCriticalEstimate());
155 156
156 EXPECT_EQ(begin_main_frame_start_to_commit_duration, 157 EXPECT_EQ(begin_main_frame_start_to_commit_duration,
157 timing_history_.BeginMainFrameStartToCommitDurationEstimate()); 158 timing_history_.BeginMainFrameStartToCommitDurationEstimate());
158 159
159 base::TimeDelta begin_main_frame_to_commit_duration_expected_ = 160 base::TimeDelta begin_main_frame_to_commit_duration_expected_ =
160 begin_main_frame_queue_duration + 161 begin_main_frame_queue_duration +
161 begin_main_frame_start_to_commit_duration; 162 begin_main_frame_start_to_commit_duration;
(...skipping 10 matching lines...) Expand all
172 173
173 TEST_F(CompositorTimingHistoryTest, BeginMainFrame_CriticalFaster) { 174 TEST_F(CompositorTimingHistoryTest, BeginMainFrame_CriticalFaster) {
174 // Critical BeginMainFrames are faster than non critical ones. 175 // Critical BeginMainFrames are faster than non critical ones.
175 base::TimeDelta begin_main_frame_queue_duration_critical = 176 base::TimeDelta begin_main_frame_queue_duration_critical =
176 base::TimeDelta::FromMilliseconds(1); 177 base::TimeDelta::FromMilliseconds(1);
177 base::TimeDelta begin_main_frame_queue_duration_not_critical = 178 base::TimeDelta begin_main_frame_queue_duration_not_critical =
178 base::TimeDelta::FromMilliseconds(2); 179 base::TimeDelta::FromMilliseconds(2);
179 base::TimeDelta begin_main_frame_start_to_commit_duration = 180 base::TimeDelta begin_main_frame_start_to_commit_duration =
180 base::TimeDelta::FromMilliseconds(1); 181 base::TimeDelta::FromMilliseconds(1);
181 182
182 timing_history_.WillBeginMainFrame(true); 183 timing_history_.WillBeginMainFrame(true, Now());
183 AdvanceNowBy(begin_main_frame_queue_duration_critical); 184 AdvanceNowBy(begin_main_frame_queue_duration_critical);
184 timing_history_.BeginMainFrameStarted(Now()); 185 timing_history_.BeginMainFrameStarted(Now());
185 AdvanceNowBy(begin_main_frame_start_to_commit_duration); 186 AdvanceNowBy(begin_main_frame_start_to_commit_duration);
186 timing_history_.BeginMainFrameAborted(); 187 timing_history_.BeginMainFrameAborted();
187 188
188 timing_history_.WillBeginMainFrame(false); 189 timing_history_.WillBeginMainFrame(false, Now());
189 AdvanceNowBy(begin_main_frame_queue_duration_not_critical); 190 AdvanceNowBy(begin_main_frame_queue_duration_not_critical);
190 timing_history_.BeginMainFrameStarted(Now()); 191 timing_history_.BeginMainFrameStarted(Now());
191 AdvanceNowBy(begin_main_frame_start_to_commit_duration); 192 AdvanceNowBy(begin_main_frame_start_to_commit_duration);
192 timing_history_.BeginMainFrameAborted(); 193 timing_history_.BeginMainFrameAborted();
193 194
194 // Since the critical BeginMainFrames are faster than non critical ones, 195 // Since the critical BeginMainFrames are faster than non critical ones,
195 // the expectations are straightforward. 196 // the expectations are straightforward.
196 EXPECT_EQ(begin_main_frame_queue_duration_critical, 197 EXPECT_EQ(begin_main_frame_queue_duration_critical,
197 timing_history_.BeginMainFrameQueueDurationCriticalEstimate()); 198 timing_history_.BeginMainFrameQueueDurationCriticalEstimate());
198 EXPECT_EQ(begin_main_frame_queue_duration_not_critical, 199 EXPECT_EQ(begin_main_frame_queue_duration_not_critical,
(...skipping 13 matching lines...) Expand all
212 // which is unexpected, but could occur if one type of frame 213 // which is unexpected, but could occur if one type of frame
213 // hasn't been sent for a significant amount of time. 214 // hasn't been sent for a significant amount of time.
214 base::TimeDelta begin_main_frame_queue_duration_critical = 215 base::TimeDelta begin_main_frame_queue_duration_critical =
215 base::TimeDelta::FromMilliseconds(2); 216 base::TimeDelta::FromMilliseconds(2);
216 base::TimeDelta begin_main_frame_queue_duration_not_critical = 217 base::TimeDelta begin_main_frame_queue_duration_not_critical =
217 base::TimeDelta::FromMilliseconds(1); 218 base::TimeDelta::FromMilliseconds(1);
218 base::TimeDelta begin_main_frame_start_to_commit_duration = 219 base::TimeDelta begin_main_frame_start_to_commit_duration =
219 base::TimeDelta::FromMilliseconds(1); 220 base::TimeDelta::FromMilliseconds(1);
220 221
221 // A single critical frame that is slow. 222 // A single critical frame that is slow.
222 timing_history_.WillBeginMainFrame(true); 223 timing_history_.WillBeginMainFrame(true, Now());
223 AdvanceNowBy(begin_main_frame_queue_duration_critical); 224 AdvanceNowBy(begin_main_frame_queue_duration_critical);
224 timing_history_.BeginMainFrameStarted(Now()); 225 timing_history_.BeginMainFrameStarted(Now());
225 AdvanceNowBy(begin_main_frame_start_to_commit_duration); 226 AdvanceNowBy(begin_main_frame_start_to_commit_duration);
226 // BeginMainFrameAborted counts as a commit complete. 227 // BeginMainFrameAborted counts as a commit complete.
227 timing_history_.BeginMainFrameAborted(); 228 timing_history_.BeginMainFrameAborted();
228 229
229 // A bunch of faster non critical frames that are newer. 230 // A bunch of faster non critical frames that are newer.
230 for (int i = 0; i < 100; i++) { 231 for (int i = 0; i < 100; i++) {
231 timing_history_.WillBeginMainFrame(false); 232 timing_history_.WillBeginMainFrame(false, Now());
232 AdvanceNowBy(begin_main_frame_queue_duration_not_critical); 233 AdvanceNowBy(begin_main_frame_queue_duration_not_critical);
233 timing_history_.BeginMainFrameStarted(Now()); 234 timing_history_.BeginMainFrameStarted(Now());
234 AdvanceNowBy(begin_main_frame_start_to_commit_duration); 235 AdvanceNowBy(begin_main_frame_start_to_commit_duration);
235 // BeginMainFrameAborted counts as a commit complete. 236 // BeginMainFrameAborted counts as a commit complete.
236 timing_history_.BeginMainFrameAborted(); 237 timing_history_.BeginMainFrameAborted();
237 } 238 }
238 239
239 // Recent fast non critical BeginMainFrames should result in the 240 // Recent fast non critical BeginMainFrames should result in the
240 // critical estimate also being fast. 241 // critical estimate also being fast.
241 EXPECT_EQ(begin_main_frame_queue_duration_not_critical, 242 EXPECT_EQ(begin_main_frame_queue_duration_not_critical,
(...skipping 16 matching lines...) Expand all
258 // which is unexpected, but could occur if one type of frame 259 // which is unexpected, but could occur if one type of frame
259 // hasn't been sent for a significant amount of time. 260 // hasn't been sent for a significant amount of time.
260 base::TimeDelta begin_main_frame_queue_duration_critical = 261 base::TimeDelta begin_main_frame_queue_duration_critical =
261 base::TimeDelta::FromMilliseconds(2); 262 base::TimeDelta::FromMilliseconds(2);
262 base::TimeDelta begin_main_frame_queue_duration_not_critical = 263 base::TimeDelta begin_main_frame_queue_duration_not_critical =
263 base::TimeDelta::FromMilliseconds(1); 264 base::TimeDelta::FromMilliseconds(1);
264 base::TimeDelta begin_main_frame_start_to_commit_duration = 265 base::TimeDelta begin_main_frame_start_to_commit_duration =
265 base::TimeDelta::FromMilliseconds(1); 266 base::TimeDelta::FromMilliseconds(1);
266 267
267 // A single non critical frame that is fast. 268 // A single non critical frame that is fast.
268 timing_history_.WillBeginMainFrame(false); 269 timing_history_.WillBeginMainFrame(false, Now());
269 AdvanceNowBy(begin_main_frame_queue_duration_not_critical); 270 AdvanceNowBy(begin_main_frame_queue_duration_not_critical);
270 timing_history_.BeginMainFrameStarted(Now()); 271 timing_history_.BeginMainFrameStarted(Now());
271 AdvanceNowBy(begin_main_frame_start_to_commit_duration); 272 AdvanceNowBy(begin_main_frame_start_to_commit_duration);
272 timing_history_.BeginMainFrameAborted(); 273 timing_history_.BeginMainFrameAborted();
273 274
274 // A bunch of slower critical frames that are newer. 275 // A bunch of slower critical frames that are newer.
275 for (int i = 0; i < 100; i++) { 276 for (int i = 0; i < 100; i++) {
276 timing_history_.WillBeginMainFrame(true); 277 timing_history_.WillBeginMainFrame(true, Now());
277 AdvanceNowBy(begin_main_frame_queue_duration_critical); 278 AdvanceNowBy(begin_main_frame_queue_duration_critical);
278 timing_history_.BeginMainFrameStarted(Now()); 279 timing_history_.BeginMainFrameStarted(Now());
279 AdvanceNowBy(begin_main_frame_start_to_commit_duration); 280 AdvanceNowBy(begin_main_frame_start_to_commit_duration);
280 timing_history_.BeginMainFrameAborted(); 281 timing_history_.BeginMainFrameAborted();
281 } 282 }
282 283
283 // Recent slow critical BeginMainFrames should result in the 284 // Recent slow critical BeginMainFrames should result in the
284 // not critical estimate also being slow. 285 // not critical estimate also being slow.
285 EXPECT_EQ(begin_main_frame_queue_duration_critical, 286 EXPECT_EQ(begin_main_frame_queue_duration_critical,
286 timing_history_.BeginMainFrameQueueDurationCriticalEstimate()); 287 timing_history_.BeginMainFrameQueueDurationCriticalEstimate());
287 EXPECT_EQ(begin_main_frame_queue_duration_critical, 288 EXPECT_EQ(begin_main_frame_queue_duration_critical,
288 timing_history_.BeginMainFrameQueueDurationNotCriticalEstimate()); 289 timing_history_.BeginMainFrameQueueDurationNotCriticalEstimate());
289 290
290 EXPECT_EQ(begin_main_frame_start_to_commit_duration, 291 EXPECT_EQ(begin_main_frame_start_to_commit_duration,
291 timing_history_.BeginMainFrameStartToCommitDurationEstimate()); 292 timing_history_.BeginMainFrameStartToCommitDurationEstimate());
292 293
293 base::TimeDelta begin_main_frame_to_commit_duration_expected_ = 294 base::TimeDelta begin_main_frame_to_commit_duration_expected_ =
294 begin_main_frame_queue_duration_critical + 295 begin_main_frame_queue_duration_critical +
295 begin_main_frame_start_to_commit_duration; 296 begin_main_frame_start_to_commit_duration;
296 EXPECT_EQ(begin_main_frame_to_commit_duration_expected_, 297 EXPECT_EQ(begin_main_frame_to_commit_duration_expected_,
297 timing_history_.BeginMainFrameToCommitDurationEstimate()); 298 timing_history_.BeginMainFrameToCommitDurationEstimate());
298 } 299 }
299 300
300 } // namespace 301 } // namespace
301 } // namespace cc 302 } // namespace cc
OLDNEW
« no previous file with comments | « cc/scheduler/compositor_timing_history.cc ('k') | cc/scheduler/scheduler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698