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

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

Issue 2752573002: Add BeginFrameLatency UMA (Closed)
Patch Set: Skip frames that originate from BeginFrameArgs::MISSED args Created 3 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
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
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 base::TimeDelta begin_main_frame_start_to_commit_duration = 62 base::TimeDelta begin_main_frame_start_to_commit_duration =
63 base::TimeDelta::FromMilliseconds(1); 63 base::TimeDelta::FromMilliseconds(1);
64 base::TimeDelta prepare_tiles_duration = base::TimeDelta::FromMilliseconds(2); 64 base::TimeDelta prepare_tiles_duration = base::TimeDelta::FromMilliseconds(2);
65 base::TimeDelta prepare_tiles_end_to_ready_to_activate_duration = 65 base::TimeDelta prepare_tiles_end_to_ready_to_activate_duration =
66 base::TimeDelta::FromMilliseconds(1); 66 base::TimeDelta::FromMilliseconds(1);
67 base::TimeDelta commit_to_ready_to_activate_duration = 67 base::TimeDelta commit_to_ready_to_activate_duration =
68 base::TimeDelta::FromMilliseconds(3); 68 base::TimeDelta::FromMilliseconds(3);
69 base::TimeDelta activate_duration = base::TimeDelta::FromMilliseconds(4); 69 base::TimeDelta activate_duration = base::TimeDelta::FromMilliseconds(4);
70 base::TimeDelta draw_duration = base::TimeDelta::FromMilliseconds(5); 70 base::TimeDelta draw_duration = base::TimeDelta::FromMilliseconds(5);
71 71
72 timing_history_.WillBeginMainFrame(true, Now()); 72 timing_history_.WillBeginMainFrame(true, Now(), BeginFrameArgs::NORMAL);
73 AdvanceNowBy(begin_main_frame_queue_duration); 73 AdvanceNowBy(begin_main_frame_queue_duration);
74 timing_history_.BeginMainFrameStarted(Now()); 74 timing_history_.BeginMainFrameStarted(Now());
75 AdvanceNowBy(begin_main_frame_start_to_commit_duration); 75 AdvanceNowBy(begin_main_frame_start_to_commit_duration);
76 timing_history_.DidCommit(); 76 timing_history_.DidCommit();
77 timing_history_.WillPrepareTiles(); 77 timing_history_.WillPrepareTiles();
78 AdvanceNowBy(prepare_tiles_duration); 78 AdvanceNowBy(prepare_tiles_duration);
79 timing_history_.DidPrepareTiles(); 79 timing_history_.DidPrepareTiles();
80 AdvanceNowBy(prepare_tiles_end_to_ready_to_activate_duration); 80 AdvanceNowBy(prepare_tiles_end_to_ready_to_activate_duration);
81 timing_history_.ReadyToActivate(); 81 timing_history_.ReadyToActivate();
82 // Do not count idle time between notification and actual activation. 82 // Do not count idle time between notification and actual activation.
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 base::TimeDelta begin_main_frame_start_to_commit_duration = 114 base::TimeDelta begin_main_frame_start_to_commit_duration =
115 base::TimeDelta::FromMilliseconds(1); 115 base::TimeDelta::FromMilliseconds(1);
116 base::TimeDelta prepare_tiles_duration = base::TimeDelta::FromMilliseconds(2); 116 base::TimeDelta prepare_tiles_duration = base::TimeDelta::FromMilliseconds(2);
117 base::TimeDelta prepare_tiles_end_to_ready_to_activate_duration = 117 base::TimeDelta prepare_tiles_end_to_ready_to_activate_duration =
118 base::TimeDelta::FromMilliseconds(1); 118 base::TimeDelta::FromMilliseconds(1);
119 base::TimeDelta commit_to_ready_to_activate_duration = 119 base::TimeDelta commit_to_ready_to_activate_duration =
120 base::TimeDelta::FromMilliseconds(3); 120 base::TimeDelta::FromMilliseconds(3);
121 base::TimeDelta activate_duration = base::TimeDelta::FromMilliseconds(4); 121 base::TimeDelta activate_duration = base::TimeDelta::FromMilliseconds(4);
122 base::TimeDelta draw_duration = base::TimeDelta::FromMilliseconds(5); 122 base::TimeDelta draw_duration = base::TimeDelta::FromMilliseconds(5);
123 123
124 timing_history_.WillBeginMainFrame(false, Now()); 124 timing_history_.WillBeginMainFrame(false, Now(), BeginFrameArgs::NORMAL);
125 AdvanceNowBy(begin_main_frame_queue_duration); 125 AdvanceNowBy(begin_main_frame_queue_duration);
126 timing_history_.BeginMainFrameStarted(Now()); 126 timing_history_.BeginMainFrameStarted(Now());
127 AdvanceNowBy(begin_main_frame_start_to_commit_duration); 127 AdvanceNowBy(begin_main_frame_start_to_commit_duration);
128 // BeginMainFrameAborted counts as a commit complete. 128 // BeginMainFrameAborted counts as a commit complete.
129 timing_history_.BeginMainFrameAborted(); 129 timing_history_.BeginMainFrameAborted();
130 timing_history_.WillPrepareTiles(); 130 timing_history_.WillPrepareTiles();
131 AdvanceNowBy(prepare_tiles_duration); 131 AdvanceNowBy(prepare_tiles_duration);
132 timing_history_.DidPrepareTiles(); 132 timing_history_.DidPrepareTiles();
133 AdvanceNowBy(prepare_tiles_end_to_ready_to_activate_duration); 133 AdvanceNowBy(prepare_tiles_end_to_ready_to_activate_duration);
134 timing_history_.ReadyToActivate(); 134 timing_history_.ReadyToActivate();
(...skipping 26 matching lines...) Expand all
161 161
162 TEST_F(CompositorTimingHistoryTest, BeginMainFrame_CriticalFaster) { 162 TEST_F(CompositorTimingHistoryTest, BeginMainFrame_CriticalFaster) {
163 // Critical BeginMainFrames are faster than non critical ones. 163 // Critical BeginMainFrames are faster than non critical ones.
164 base::TimeDelta begin_main_frame_queue_duration_critical = 164 base::TimeDelta begin_main_frame_queue_duration_critical =
165 base::TimeDelta::FromMilliseconds(1); 165 base::TimeDelta::FromMilliseconds(1);
166 base::TimeDelta begin_main_frame_queue_duration_not_critical = 166 base::TimeDelta begin_main_frame_queue_duration_not_critical =
167 base::TimeDelta::FromMilliseconds(2); 167 base::TimeDelta::FromMilliseconds(2);
168 base::TimeDelta begin_main_frame_start_to_commit_duration = 168 base::TimeDelta begin_main_frame_start_to_commit_duration =
169 base::TimeDelta::FromMilliseconds(1); 169 base::TimeDelta::FromMilliseconds(1);
170 170
171 timing_history_.WillBeginMainFrame(true, Now()); 171 timing_history_.WillBeginMainFrame(true, Now(), BeginFrameArgs::NORMAL);
172 AdvanceNowBy(begin_main_frame_queue_duration_critical); 172 AdvanceNowBy(begin_main_frame_queue_duration_critical);
173 timing_history_.BeginMainFrameStarted(Now()); 173 timing_history_.BeginMainFrameStarted(Now());
174 AdvanceNowBy(begin_main_frame_start_to_commit_duration); 174 AdvanceNowBy(begin_main_frame_start_to_commit_duration);
175 timing_history_.BeginMainFrameAborted(); 175 timing_history_.BeginMainFrameAborted();
176 176
177 timing_history_.WillBeginMainFrame(false, Now()); 177 timing_history_.WillBeginMainFrame(false, Now(), BeginFrameArgs::NORMAL);
178 AdvanceNowBy(begin_main_frame_queue_duration_not_critical); 178 AdvanceNowBy(begin_main_frame_queue_duration_not_critical);
179 timing_history_.BeginMainFrameStarted(Now()); 179 timing_history_.BeginMainFrameStarted(Now());
180 AdvanceNowBy(begin_main_frame_start_to_commit_duration); 180 AdvanceNowBy(begin_main_frame_start_to_commit_duration);
181 timing_history_.BeginMainFrameAborted(); 181 timing_history_.BeginMainFrameAborted();
182 182
183 // Since the critical BeginMainFrames are faster than non critical ones, 183 // Since the critical BeginMainFrames are faster than non critical ones,
184 // the expectations are straightforward. 184 // the expectations are straightforward.
185 EXPECT_EQ(begin_main_frame_queue_duration_critical, 185 EXPECT_EQ(begin_main_frame_queue_duration_critical,
186 timing_history_.BeginMainFrameQueueDurationCriticalEstimate()); 186 timing_history_.BeginMainFrameQueueDurationCriticalEstimate());
187 EXPECT_EQ(begin_main_frame_queue_duration_not_critical, 187 EXPECT_EQ(begin_main_frame_queue_duration_not_critical,
188 timing_history_.BeginMainFrameQueueDurationNotCriticalEstimate()); 188 timing_history_.BeginMainFrameQueueDurationNotCriticalEstimate());
189 EXPECT_EQ(begin_main_frame_start_to_commit_duration, 189 EXPECT_EQ(begin_main_frame_start_to_commit_duration,
190 timing_history_.BeginMainFrameStartToCommitDurationEstimate()); 190 timing_history_.BeginMainFrameStartToCommitDurationEstimate());
191 } 191 }
192 192
193 TEST_F(CompositorTimingHistoryTest, BeginMainFrames_OldCriticalSlower) { 193 TEST_F(CompositorTimingHistoryTest, BeginMainFrames_OldCriticalSlower) {
194 // Critical BeginMainFrames are slower than non critical ones, 194 // Critical BeginMainFrames are slower than non critical ones,
195 // which is unexpected, but could occur if one type of frame 195 // which is unexpected, but could occur if one type of frame
196 // hasn't been sent for a significant amount of time. 196 // hasn't been sent for a significant amount of time.
197 base::TimeDelta begin_main_frame_queue_duration_critical = 197 base::TimeDelta begin_main_frame_queue_duration_critical =
198 base::TimeDelta::FromMilliseconds(2); 198 base::TimeDelta::FromMilliseconds(2);
199 base::TimeDelta begin_main_frame_queue_duration_not_critical = 199 base::TimeDelta begin_main_frame_queue_duration_not_critical =
200 base::TimeDelta::FromMilliseconds(1); 200 base::TimeDelta::FromMilliseconds(1);
201 base::TimeDelta begin_main_frame_start_to_commit_duration = 201 base::TimeDelta begin_main_frame_start_to_commit_duration =
202 base::TimeDelta::FromMilliseconds(1); 202 base::TimeDelta::FromMilliseconds(1);
203 203
204 // A single critical frame that is slow. 204 // A single critical frame that is slow.
205 timing_history_.WillBeginMainFrame(true, Now()); 205 timing_history_.WillBeginMainFrame(true, Now(), BeginFrameArgs::NORMAL);
206 AdvanceNowBy(begin_main_frame_queue_duration_critical); 206 AdvanceNowBy(begin_main_frame_queue_duration_critical);
207 timing_history_.BeginMainFrameStarted(Now()); 207 timing_history_.BeginMainFrameStarted(Now());
208 AdvanceNowBy(begin_main_frame_start_to_commit_duration); 208 AdvanceNowBy(begin_main_frame_start_to_commit_duration);
209 // BeginMainFrameAborted counts as a commit complete. 209 // BeginMainFrameAborted counts as a commit complete.
210 timing_history_.BeginMainFrameAborted(); 210 timing_history_.BeginMainFrameAborted();
211 211
212 // A bunch of faster non critical frames that are newer. 212 // A bunch of faster non critical frames that are newer.
213 for (int i = 0; i < 100; i++) { 213 for (int i = 0; i < 100; i++) {
214 timing_history_.WillBeginMainFrame(false, Now()); 214 timing_history_.WillBeginMainFrame(false, Now(), BeginFrameArgs::NORMAL);
215 AdvanceNowBy(begin_main_frame_queue_duration_not_critical); 215 AdvanceNowBy(begin_main_frame_queue_duration_not_critical);
216 timing_history_.BeginMainFrameStarted(Now()); 216 timing_history_.BeginMainFrameStarted(Now());
217 AdvanceNowBy(begin_main_frame_start_to_commit_duration); 217 AdvanceNowBy(begin_main_frame_start_to_commit_duration);
218 // BeginMainFrameAborted counts as a commit complete. 218 // BeginMainFrameAborted counts as a commit complete.
219 timing_history_.BeginMainFrameAborted(); 219 timing_history_.BeginMainFrameAborted();
220 } 220 }
221 221
222 // Recent fast non critical BeginMainFrames should result in the 222 // Recent fast non critical BeginMainFrames should result in the
223 // critical estimate also being fast. 223 // critical estimate also being fast.
224 EXPECT_EQ(begin_main_frame_queue_duration_not_critical, 224 EXPECT_EQ(begin_main_frame_queue_duration_not_critical,
(...skipping 10 matching lines...) Expand all
235 // which is unexpected, but could occur if one type of frame 235 // which is unexpected, but could occur if one type of frame
236 // hasn't been sent for a significant amount of time. 236 // hasn't been sent for a significant amount of time.
237 base::TimeDelta begin_main_frame_queue_duration_critical = 237 base::TimeDelta begin_main_frame_queue_duration_critical =
238 base::TimeDelta::FromMilliseconds(2); 238 base::TimeDelta::FromMilliseconds(2);
239 base::TimeDelta begin_main_frame_queue_duration_not_critical = 239 base::TimeDelta begin_main_frame_queue_duration_not_critical =
240 base::TimeDelta::FromMilliseconds(1); 240 base::TimeDelta::FromMilliseconds(1);
241 base::TimeDelta begin_main_frame_start_to_commit_duration = 241 base::TimeDelta begin_main_frame_start_to_commit_duration =
242 base::TimeDelta::FromMilliseconds(1); 242 base::TimeDelta::FromMilliseconds(1);
243 243
244 // A single non critical frame that is fast. 244 // A single non critical frame that is fast.
245 timing_history_.WillBeginMainFrame(false, Now()); 245 timing_history_.WillBeginMainFrame(false, Now(), BeginFrameArgs::NORMAL);
246 AdvanceNowBy(begin_main_frame_queue_duration_not_critical); 246 AdvanceNowBy(begin_main_frame_queue_duration_not_critical);
247 timing_history_.BeginMainFrameStarted(Now()); 247 timing_history_.BeginMainFrameStarted(Now());
248 AdvanceNowBy(begin_main_frame_start_to_commit_duration); 248 AdvanceNowBy(begin_main_frame_start_to_commit_duration);
249 timing_history_.BeginMainFrameAborted(); 249 timing_history_.BeginMainFrameAborted();
250 250
251 // A bunch of slower critical frames that are newer. 251 // A bunch of slower critical frames that are newer.
252 for (int i = 0; i < 100; i++) { 252 for (int i = 0; i < 100; i++) {
253 timing_history_.WillBeginMainFrame(true, Now()); 253 timing_history_.WillBeginMainFrame(true, Now(), BeginFrameArgs::NORMAL);
254 AdvanceNowBy(begin_main_frame_queue_duration_critical); 254 AdvanceNowBy(begin_main_frame_queue_duration_critical);
255 timing_history_.BeginMainFrameStarted(Now()); 255 timing_history_.BeginMainFrameStarted(Now());
256 AdvanceNowBy(begin_main_frame_start_to_commit_duration); 256 AdvanceNowBy(begin_main_frame_start_to_commit_duration);
257 timing_history_.BeginMainFrameAborted(); 257 timing_history_.BeginMainFrameAborted();
258 } 258 }
259 259
260 // Recent slow critical BeginMainFrames should result in the 260 // Recent slow critical BeginMainFrames should result in the
261 // not critical estimate also being slow. 261 // not critical estimate also being slow.
262 EXPECT_EQ(begin_main_frame_queue_duration_critical, 262 EXPECT_EQ(begin_main_frame_queue_duration_critical,
263 timing_history_.BeginMainFrameQueueDurationCriticalEstimate()); 263 timing_history_.BeginMainFrameQueueDurationCriticalEstimate());
264 EXPECT_EQ(begin_main_frame_queue_duration_critical, 264 EXPECT_EQ(begin_main_frame_queue_duration_critical,
265 timing_history_.BeginMainFrameQueueDurationNotCriticalEstimate()); 265 timing_history_.BeginMainFrameQueueDurationNotCriticalEstimate());
266 266
267 EXPECT_EQ(begin_main_frame_start_to_commit_duration, 267 EXPECT_EQ(begin_main_frame_start_to_commit_duration,
268 timing_history_.BeginMainFrameStartToCommitDurationEstimate()); 268 timing_history_.BeginMainFrameStartToCommitDurationEstimate());
269 } 269 }
270 270
271 } // namespace 271 } // namespace
272 } // namespace cc 272 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698