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

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

Issue 1460923002: cc: CompositorTimingHistory throughput UMAs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@didDraw
Patch Set: Remove debug TRACE_EVENTS Created 5 years 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/metrics/histogram.h" 7 #include "base/metrics/histogram.h"
8 #include "base/trace_event/trace_event.h" 8 #include "base/trace_event/trace_event.h"
9 #include "cc/debug/rendering_stats_instrumentation.h" 9 #include "cc/debug/rendering_stats_instrumentation.h"
10 10
11 namespace cc { 11 namespace cc {
12 12
13 class CompositorTimingHistory::UMAReporter { 13 class CompositorTimingHistory::UMAReporter {
14 public: 14 public:
15 virtual ~UMAReporter() {} 15 virtual ~UMAReporter() {}
16 16
17 // Throughput measurements
18 virtual void AddBeginMainFrameIntervalCritical(base::TimeDelta interval) = 0;
19 virtual void AddBeginMainFrameIntervalNotCritical(
20 base::TimeDelta interval) = 0;
21 virtual void AddCommitInterval(base::TimeDelta interval) = 0;
22 virtual void AddDrawInterval(base::TimeDelta interval) = 0;
23
24 // Latency measurements
17 virtual void AddBeginMainFrameToCommitDuration(base::TimeDelta duration, 25 virtual void AddBeginMainFrameToCommitDuration(base::TimeDelta duration,
18 base::TimeDelta estimate, 26 base::TimeDelta estimate,
19 bool affects_estimate) = 0; 27 bool affects_estimate) = 0;
20 virtual void AddBeginMainFrameQueueDurationCriticalDuration( 28 virtual void AddBeginMainFrameQueueDurationCriticalDuration(
21 base::TimeDelta duration, 29 base::TimeDelta duration,
22 bool affects_estimate) = 0; 30 bool affects_estimate) = 0;
23 virtual void AddBeginMainFrameQueueDurationNotCriticalDuration( 31 virtual void AddBeginMainFrameQueueDurationNotCriticalDuration(
24 base::TimeDelta duration, 32 base::TimeDelta duration,
25 bool affects_estimate) = 0; 33 bool affects_estimate) = 0;
26 virtual void AddBeginMainFrameStartToCommitDuration( 34 virtual void AddBeginMainFrameStartToCommitDuration(
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 UMA_HISTOGRAM_CUSTOM_TIMES_MICROS("Scheduling." category "." subcategory \ 131 UMA_HISTOGRAM_CUSTOM_TIMES_MICROS("Scheduling." category "." subcategory \
124 ".NotUsedForEstimate", \ 132 ".NotUsedForEstimate", \
125 duration); \ 133 duration); \
126 } \ 134 } \
127 } while (false) 135 } while (false)
128 136
129 class RendererUMAReporter : public CompositorTimingHistory::UMAReporter { 137 class RendererUMAReporter : public CompositorTimingHistory::UMAReporter {
130 public: 138 public:
131 ~RendererUMAReporter() override {} 139 ~RendererUMAReporter() override {}
132 140
141 void AddBeginMainFrameIntervalCritical(base::TimeDelta interval) override {
142 UMA_HISTOGRAM_CUSTOM_TIMES_MICROS(
143 "Scheduling.Renderer.BeginMainFrameIntervalCritical", interval);
144 }
145
146 void AddBeginMainFrameIntervalNotCritical(base::TimeDelta interval) override {
147 UMA_HISTOGRAM_CUSTOM_TIMES_MICROS(
148 "Scheduling.Renderer.BeginMainFrameIntervalNotCritical", interval);
149 }
150
151 void AddCommitInterval(base::TimeDelta interval) override {
152 UMA_HISTOGRAM_CUSTOM_TIMES_MICROS("Scheduling.Renderer.CommitInterval",
153 interval);
154 }
155
156 void AddDrawInterval(base::TimeDelta interval) override {
157 UMA_HISTOGRAM_CUSTOM_TIMES_MICROS("Scheduling.Renderer.DrawInterval",
158 interval);
159 }
160
133 void AddBeginMainFrameToCommitDuration(base::TimeDelta duration, 161 void AddBeginMainFrameToCommitDuration(base::TimeDelta duration,
134 base::TimeDelta estimate, 162 base::TimeDelta estimate,
135 bool affects_estimate) override { 163 bool affects_estimate) override {
136 REPORT_COMPOSITOR_TIMING_HISTORY_UMA("Renderer", "BeginMainFrameToCommit"); 164 REPORT_COMPOSITOR_TIMING_HISTORY_UMA("Renderer", "BeginMainFrameToCommit");
137 } 165 }
138 166
139 void AddBeginMainFrameQueueDurationCriticalDuration( 167 void AddBeginMainFrameQueueDurationCriticalDuration(
140 base::TimeDelta duration, 168 base::TimeDelta duration,
141 bool affects_estimate) override { 169 bool affects_estimate) override {
142 REPORT_COMPOSITOR_TIMING_HISTORY_UMA2( 170 REPORT_COMPOSITOR_TIMING_HISTORY_UMA2(
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 void AddSwapToAckLatency(base::TimeDelta duration) override { 212 void AddSwapToAckLatency(base::TimeDelta duration) override {
185 UMA_HISTOGRAM_CUSTOM_TIMES_MICROS("Scheduling.Renderer.SwapToAckLatency", 213 UMA_HISTOGRAM_CUSTOM_TIMES_MICROS("Scheduling.Renderer.SwapToAckLatency",
186 duration); 214 duration);
187 } 215 }
188 }; 216 };
189 217
190 class BrowserUMAReporter : public CompositorTimingHistory::UMAReporter { 218 class BrowserUMAReporter : public CompositorTimingHistory::UMAReporter {
191 public: 219 public:
192 ~BrowserUMAReporter() override {} 220 ~BrowserUMAReporter() override {}
193 221
222 void AddBeginMainFrameIntervalCritical(base::TimeDelta interval) override {
223 UMA_HISTOGRAM_CUSTOM_TIMES_MICROS(
224 "Scheduling.Browser.BeginMainFrameIntervalCritical", interval);
225 }
226
227 void AddBeginMainFrameIntervalNotCritical(base::TimeDelta interval) override {
228 UMA_HISTOGRAM_CUSTOM_TIMES_MICROS(
229 "Scheduling.Browser.BeginMainFrameIntervalNotCritical", interval);
230 }
231
232 void AddCommitInterval(base::TimeDelta interval) override {
233 UMA_HISTOGRAM_CUSTOM_TIMES_MICROS("Scheduling.Browser.CommitInterval",
234 interval);
235 }
236
237 void AddDrawInterval(base::TimeDelta interval) override {
238 UMA_HISTOGRAM_CUSTOM_TIMES_MICROS("Scheduling.Browser.DrawInterval",
239 interval);
240 }
241
194 void AddBeginMainFrameToCommitDuration(base::TimeDelta duration, 242 void AddBeginMainFrameToCommitDuration(base::TimeDelta duration,
195 base::TimeDelta estimate, 243 base::TimeDelta estimate,
196 bool affects_estimate) override { 244 bool affects_estimate) override {
197 REPORT_COMPOSITOR_TIMING_HISTORY_UMA("Browser", "BeginMainFrameToCommit"); 245 REPORT_COMPOSITOR_TIMING_HISTORY_UMA("Browser", "BeginMainFrameToCommit");
198 } 246 }
199 247
200 void AddBeginMainFrameQueueDurationCriticalDuration( 248 void AddBeginMainFrameQueueDurationCriticalDuration(
201 base::TimeDelta duration, 249 base::TimeDelta duration,
202 bool affects_estimate) override { 250 bool affects_estimate) override {
203 REPORT_COMPOSITOR_TIMING_HISTORY_UMA2( 251 REPORT_COMPOSITOR_TIMING_HISTORY_UMA2(
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 292
245 void AddSwapToAckLatency(base::TimeDelta duration) override { 293 void AddSwapToAckLatency(base::TimeDelta duration) override {
246 UMA_HISTOGRAM_CUSTOM_TIMES_MICROS("Scheduling.Browser.SwapToAckLatency", 294 UMA_HISTOGRAM_CUSTOM_TIMES_MICROS("Scheduling.Browser.SwapToAckLatency",
247 duration); 295 duration);
248 } 296 }
249 }; 297 };
250 298
251 class NullUMAReporter : public CompositorTimingHistory::UMAReporter { 299 class NullUMAReporter : public CompositorTimingHistory::UMAReporter {
252 public: 300 public:
253 ~NullUMAReporter() override {} 301 ~NullUMAReporter() override {}
302 void AddBeginMainFrameIntervalCritical(base::TimeDelta interval) override {}
303 void AddBeginMainFrameIntervalNotCritical(base::TimeDelta interval) override {
304 }
305 void AddCommitInterval(base::TimeDelta interval) override {}
306 void AddDrawInterval(base::TimeDelta interval) override {}
254 void AddBeginMainFrameToCommitDuration(base::TimeDelta duration, 307 void AddBeginMainFrameToCommitDuration(base::TimeDelta duration,
255 base::TimeDelta estimate, 308 base::TimeDelta estimate,
256 bool affects_estimate) override {} 309 bool affects_estimate) override {}
257 void AddBeginMainFrameQueueDurationCriticalDuration( 310 void AddBeginMainFrameQueueDurationCriticalDuration(
258 base::TimeDelta duration, 311 base::TimeDelta duration,
259 bool affects_estimate) override {} 312 bool affects_estimate) override {}
260 void AddBeginMainFrameQueueDurationNotCriticalDuration( 313 void AddBeginMainFrameQueueDurationNotCriticalDuration(
261 base::TimeDelta duration, 314 base::TimeDelta duration,
262 bool affects_estimate) override {} 315 bool affects_estimate) override {}
263 void AddBeginMainFrameStartToCommitDuration(base::TimeDelta duration, 316 void AddBeginMainFrameStartToCommitDuration(base::TimeDelta duration,
(...skipping 12 matching lines...) Expand all
276 bool affects_estimate) override {} 329 bool affects_estimate) override {}
277 void AddSwapToAckLatency(base::TimeDelta duration) override {} 330 void AddSwapToAckLatency(base::TimeDelta duration) override {}
278 }; 331 };
279 332
280 } // namespace 333 } // namespace
281 334
282 CompositorTimingHistory::CompositorTimingHistory( 335 CompositorTimingHistory::CompositorTimingHistory(
283 UMACategory uma_category, 336 UMACategory uma_category,
284 RenderingStatsInstrumentation* rendering_stats_instrumentation) 337 RenderingStatsInstrumentation* rendering_stats_instrumentation)
285 : enabled_(false), 338 : enabled_(false),
339 did_send_begin_main_frame_(false),
340 begin_main_frame_needed_continuously_(false),
341 begin_main_frame_committing_continuously_(false),
342 compositor_drawing_continuously_(false),
286 begin_main_frame_sent_to_commit_duration_history_(kDurationHistorySize), 343 begin_main_frame_sent_to_commit_duration_history_(kDurationHistorySize),
287 begin_main_frame_queue_duration_critical_history_(kDurationHistorySize), 344 begin_main_frame_queue_duration_critical_history_(kDurationHistorySize),
288 begin_main_frame_queue_duration_not_critical_history_( 345 begin_main_frame_queue_duration_not_critical_history_(
289 kDurationHistorySize), 346 kDurationHistorySize),
290 begin_main_frame_start_to_commit_duration_history_(kDurationHistorySize), 347 begin_main_frame_start_to_commit_duration_history_(kDurationHistorySize),
291 commit_to_ready_to_activate_duration_history_(kDurationHistorySize), 348 commit_to_ready_to_activate_duration_history_(kDurationHistorySize),
292 prepare_tiles_duration_history_(kDurationHistorySize), 349 prepare_tiles_duration_history_(kDurationHistorySize),
293 activate_duration_history_(kDurationHistorySize), 350 activate_duration_history_(kDurationHistorySize),
294 draw_duration_history_(kDurationHistorySize), 351 draw_duration_history_(kDurationHistorySize),
295 begin_main_frame_on_critical_path_(false), 352 begin_main_frame_on_critical_path_(false),
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
331 } 388 }
332 389
333 base::TimeTicks CompositorTimingHistory::Now() const { 390 base::TimeTicks CompositorTimingHistory::Now() const {
334 return base::TimeTicks::Now(); 391 return base::TimeTicks::Now();
335 } 392 }
336 393
337 void CompositorTimingHistory::SetRecordingEnabled(bool enabled) { 394 void CompositorTimingHistory::SetRecordingEnabled(bool enabled) {
338 enabled_ = enabled; 395 enabled_ = enabled;
339 } 396 }
340 397
398 void CompositorTimingHistory::SetBeginMainFrameNeededContinuously(bool active) {
399 if (active == begin_main_frame_needed_continuously_)
400 return;
401 begin_main_frame_end_time_prev_ = base::TimeTicks();
402 begin_main_frame_needed_continuously_ = active;
403 }
404
405 void CompositorTimingHistory::SetBeginMainFrameCommittingContinuously(
406 bool active) {
407 if (active == begin_main_frame_committing_continuously_)
408 return;
409 new_active_tree_draw_end_time_prev_ = base::TimeTicks();
410 begin_main_frame_committing_continuously_ = active;
411 }
412
413 void CompositorTimingHistory::SetCompositorDrawingContinuously(bool active) {
414 if (active == compositor_drawing_continuously_)
415 return;
416 draw_end_time_prev_ = base::TimeTicks();
417 compositor_drawing_continuously_ = active;
418 }
419
341 base::TimeDelta 420 base::TimeDelta
342 CompositorTimingHistory::BeginMainFrameToCommitDurationEstimate() const { 421 CompositorTimingHistory::BeginMainFrameToCommitDurationEstimate() const {
343 return begin_main_frame_sent_to_commit_duration_history_.Percentile( 422 return begin_main_frame_sent_to_commit_duration_history_.Percentile(
344 kBeginMainFrameToCommitEstimationPercentile); 423 kBeginMainFrameToCommitEstimationPercentile);
345 } 424 }
346 425
347 base::TimeDelta 426 base::TimeDelta
348 CompositorTimingHistory::BeginMainFrameQueueDurationCriticalEstimate() const { 427 CompositorTimingHistory::BeginMainFrameQueueDurationCriticalEstimate() const {
349 return begin_main_frame_queue_duration_critical_history_.Percentile( 428 return begin_main_frame_queue_duration_critical_history_.Percentile(
350 kBeginMainFrameQueueDurationCriticalEstimationPercentile); 429 kBeginMainFrameQueueDurationCriticalEstimationPercentile);
(...skipping 24 matching lines...) Expand all
375 } 454 }
376 455
377 base::TimeDelta CompositorTimingHistory::ActivateDurationEstimate() const { 456 base::TimeDelta CompositorTimingHistory::ActivateDurationEstimate() const {
378 return activate_duration_history_.Percentile(kActivateEstimationPercentile); 457 return activate_duration_history_.Percentile(kActivateEstimationPercentile);
379 } 458 }
380 459
381 base::TimeDelta CompositorTimingHistory::DrawDurationEstimate() const { 460 base::TimeDelta CompositorTimingHistory::DrawDurationEstimate() const {
382 return draw_duration_history_.Percentile(kDrawEstimationPercentile); 461 return draw_duration_history_.Percentile(kDrawEstimationPercentile);
383 } 462 }
384 463
464 void CompositorTimingHistory::WillBeginImplFrame(
465 bool new_active_tree_is_likely) {
466 // The check for whether a BeginMainFrame was sent anytime between two
467 // BeginImplFrames protects us from not detecting a fast main thread that
468 // does all it's work and goes idle in between BeginImplFrames.
469 // For example, this may happen if an animation is being driven with
470 // setInterval(17) or if input events just happen to arrive in the
471 // middle of every frame.
472 if (!new_active_tree_is_likely && !did_send_begin_main_frame_) {
473 SetBeginMainFrameNeededContinuously(false);
474 SetBeginMainFrameCommittingContinuously(false);
475 }
476
477 did_send_begin_main_frame_ = false;
478 }
479
480 void CompositorTimingHistory::WillFinishImplFrame(bool needs_redraw) {
481 if (!needs_redraw)
482 SetCompositorDrawingContinuously(false);
483 }
484
485 void CompositorTimingHistory::BeginImplFrameNotExpectedSoon() {
486 SetBeginMainFrameNeededContinuously(false);
487 SetBeginMainFrameCommittingContinuously(false);
488 SetCompositorDrawingContinuously(false);
489 }
490
385 void CompositorTimingHistory::WillBeginMainFrame(bool on_critical_path) { 491 void CompositorTimingHistory::WillBeginMainFrame(bool on_critical_path) {
386 DCHECK_EQ(base::TimeTicks(), begin_main_frame_sent_time_); 492 DCHECK_EQ(base::TimeTicks(), begin_main_frame_sent_time_);
387 begin_main_frame_on_critical_path_ = on_critical_path; 493 begin_main_frame_on_critical_path_ = on_critical_path;
388 begin_main_frame_sent_time_ = Now(); 494 begin_main_frame_sent_time_ = Now();
495
496 did_send_begin_main_frame_ = true;
497 SetBeginMainFrameNeededContinuously(true);
389 } 498 }
390 499
391 void CompositorTimingHistory::BeginMainFrameStarted( 500 void CompositorTimingHistory::BeginMainFrameStarted(
392 base::TimeTicks main_thread_start_time) { 501 base::TimeTicks main_thread_start_time) {
393 DCHECK_NE(base::TimeTicks(), begin_main_frame_sent_time_); 502 DCHECK_NE(base::TimeTicks(), begin_main_frame_sent_time_);
394 DCHECK_EQ(base::TimeTicks(), begin_main_frame_start_time_); 503 DCHECK_EQ(base::TimeTicks(), begin_main_frame_start_time_);
395 begin_main_frame_start_time_ = main_thread_start_time; 504 begin_main_frame_start_time_ = main_thread_start_time;
396 } 505 }
397 506
398 void CompositorTimingHistory::BeginMainFrameAborted() { 507 void CompositorTimingHistory::BeginMainFrameAborted() {
399 DidCommit(); 508 SetBeginMainFrameCommittingContinuously(false);
509 DidBeginMainFrame();
400 } 510 }
401 511
402 void CompositorTimingHistory::DidCommit() { 512 void CompositorTimingHistory::DidCommit() {
513 SetBeginMainFrameCommittingContinuously(true);
514 DidBeginMainFrame();
515 }
516
517 void CompositorTimingHistory::DidBeginMainFrame() {
403 DCHECK_NE(base::TimeTicks(), begin_main_frame_sent_time_); 518 DCHECK_NE(base::TimeTicks(), begin_main_frame_sent_time_);
404 519
405 commit_time_ = Now(); 520 begin_main_frame_end_time_ = Now();
406 521
407 // If the BeginMainFrame start time isn't know, assume it was immediate 522 // If the BeginMainFrame start time isn't know, assume it was immediate
408 // for scheduling purposes, but don't report it for UMA to avoid skewing 523 // for scheduling purposes, but don't report it for UMA to avoid skewing
409 // the results. 524 // the results.
410 bool begin_main_frame_start_time_is_valid = 525 bool begin_main_frame_start_time_is_valid =
411 !begin_main_frame_start_time_.is_null(); 526 !begin_main_frame_start_time_.is_null();
412 if (!begin_main_frame_start_time_is_valid) 527 if (!begin_main_frame_start_time_is_valid)
413 begin_main_frame_start_time_ = begin_main_frame_sent_time_; 528 begin_main_frame_start_time_ = begin_main_frame_sent_time_;
414 529
415 base::TimeDelta begin_main_frame_sent_to_commit_duration = 530 base::TimeDelta begin_main_frame_sent_to_commit_duration =
416 commit_time_ - begin_main_frame_sent_time_; 531 begin_main_frame_end_time_ - begin_main_frame_sent_time_;
417 base::TimeDelta begin_main_frame_queue_duration = 532 base::TimeDelta begin_main_frame_queue_duration =
418 begin_main_frame_start_time_ - begin_main_frame_sent_time_; 533 begin_main_frame_start_time_ - begin_main_frame_sent_time_;
419 base::TimeDelta begin_main_frame_start_to_commit_duration = 534 base::TimeDelta begin_main_frame_start_to_commit_duration =
420 commit_time_ - begin_main_frame_start_time_; 535 begin_main_frame_end_time_ - begin_main_frame_start_time_;
421 536
422 // Before adding the new data point to the timing history, see what we would 537 // Before adding the new data point to the timing history, see what we would
423 // have predicted for this frame. This allows us to keep track of the accuracy 538 // have predicted for this frame. This allows us to keep track of the accuracy
424 // of our predictions. 539 // of our predictions.
425 base::TimeDelta begin_main_frame_sent_to_commit_estimate = 540 base::TimeDelta begin_main_frame_sent_to_commit_estimate =
426 BeginMainFrameToCommitDurationEstimate(); 541 BeginMainFrameToCommitDurationEstimate();
427 uma_reporter_->AddBeginMainFrameToCommitDuration( 542 uma_reporter_->AddBeginMainFrameToCommitDuration(
428 begin_main_frame_sent_to_commit_duration, 543 begin_main_frame_sent_to_commit_duration,
429 begin_main_frame_sent_to_commit_estimate, enabled_); 544 begin_main_frame_sent_to_commit_estimate, enabled_);
430 rendering_stats_instrumentation_->AddBeginMainFrameToCommitDuration( 545 rendering_stats_instrumentation_->AddBeginMainFrameToCommitDuration(
(...skipping 20 matching lines...) Expand all
451 begin_main_frame_queue_duration_critical_history_.InsertSample( 566 begin_main_frame_queue_duration_critical_history_.InsertSample(
452 begin_main_frame_queue_duration); 567 begin_main_frame_queue_duration);
453 } else { 568 } else {
454 begin_main_frame_queue_duration_not_critical_history_.InsertSample( 569 begin_main_frame_queue_duration_not_critical_history_.InsertSample(
455 begin_main_frame_queue_duration); 570 begin_main_frame_queue_duration);
456 } 571 }
457 begin_main_frame_start_to_commit_duration_history_.InsertSample( 572 begin_main_frame_start_to_commit_duration_history_.InsertSample(
458 begin_main_frame_start_to_commit_duration); 573 begin_main_frame_start_to_commit_duration);
459 } 574 }
460 575
576 if (begin_main_frame_needed_continuously_) {
577 if (!begin_main_frame_end_time_prev_.is_null()) {
578 base::TimeDelta commit_interval =
579 begin_main_frame_end_time_ - begin_main_frame_end_time_prev_;
580 if (begin_main_frame_on_critical_path_)
581 uma_reporter_->AddBeginMainFrameIntervalCritical(commit_interval);
582 else
583 uma_reporter_->AddBeginMainFrameIntervalNotCritical(commit_interval);
584 }
585 begin_main_frame_end_time_prev_ = begin_main_frame_end_time_;
586 }
587
461 begin_main_frame_sent_time_ = base::TimeTicks(); 588 begin_main_frame_sent_time_ = base::TimeTicks();
462 begin_main_frame_start_time_ = base::TimeTicks(); 589 begin_main_frame_start_time_ = base::TimeTicks();
463 } 590 }
464 591
465 void CompositorTimingHistory::WillPrepareTiles() { 592 void CompositorTimingHistory::WillPrepareTiles() {
466 DCHECK_EQ(base::TimeTicks(), start_prepare_tiles_time_); 593 DCHECK_EQ(base::TimeTicks(), prepare_tiles_start_time_);
467 start_prepare_tiles_time_ = Now(); 594 prepare_tiles_start_time_ = Now();
468 } 595 }
469 596
470 void CompositorTimingHistory::DidPrepareTiles() { 597 void CompositorTimingHistory::DidPrepareTiles() {
471 DCHECK_NE(base::TimeTicks(), start_prepare_tiles_time_); 598 DCHECK_NE(base::TimeTicks(), prepare_tiles_start_time_);
472 599
473 base::TimeDelta prepare_tiles_duration = Now() - start_prepare_tiles_time_; 600 base::TimeDelta prepare_tiles_duration = Now() - prepare_tiles_start_time_;
474 uma_reporter_->AddPrepareTilesDuration( 601 uma_reporter_->AddPrepareTilesDuration(
475 prepare_tiles_duration, PrepareTilesDurationEstimate(), enabled_); 602 prepare_tiles_duration, PrepareTilesDurationEstimate(), enabled_);
476 if (enabled_) 603 if (enabled_)
477 prepare_tiles_duration_history_.InsertSample(prepare_tiles_duration); 604 prepare_tiles_duration_history_.InsertSample(prepare_tiles_duration);
478 605
479 start_prepare_tiles_time_ = base::TimeTicks(); 606 prepare_tiles_start_time_ = base::TimeTicks();
480 } 607 }
481 608
482 void CompositorTimingHistory::ReadyToActivate() { 609 void CompositorTimingHistory::ReadyToActivate() {
483 // We only care about the first ready to activate signal 610 // We only care about the first ready to activate signal
484 // after a commit. 611 // after a commit.
485 if (commit_time_ == base::TimeTicks()) 612 if (begin_main_frame_end_time_ == base::TimeTicks())
486 return; 613 return;
487 614
488 base::TimeDelta time_since_commit = Now() - commit_time_; 615 base::TimeDelta time_since_commit = Now() - begin_main_frame_end_time_;
489 616
490 // Before adding the new data point to the timing history, see what we would 617 // Before adding the new data point to the timing history, see what we would
491 // have predicted for this frame. This allows us to keep track of the accuracy 618 // have predicted for this frame. This allows us to keep track of the accuracy
492 // of our predictions. 619 // of our predictions.
493 620
494 base::TimeDelta commit_to_ready_to_activate_estimate = 621 base::TimeDelta commit_to_ready_to_activate_estimate =
495 CommitToReadyToActivateDurationEstimate(); 622 CommitToReadyToActivateDurationEstimate();
496 uma_reporter_->AddCommitToReadyToActivateDuration( 623 uma_reporter_->AddCommitToReadyToActivateDuration(
497 time_since_commit, commit_to_ready_to_activate_estimate, enabled_); 624 time_since_commit, commit_to_ready_to_activate_estimate, enabled_);
498 rendering_stats_instrumentation_->AddCommitToActivateDuration( 625 rendering_stats_instrumentation_->AddCommitToActivateDuration(
499 time_since_commit, commit_to_ready_to_activate_estimate); 626 time_since_commit, commit_to_ready_to_activate_estimate);
500 627
501 if (enabled_) { 628 if (enabled_) {
502 commit_to_ready_to_activate_duration_history_.InsertSample( 629 commit_to_ready_to_activate_duration_history_.InsertSample(
503 time_since_commit); 630 time_since_commit);
504 } 631 }
505 632
506 commit_time_ = base::TimeTicks(); 633 begin_main_frame_end_time_ = base::TimeTicks();
507 } 634 }
508 635
509 void CompositorTimingHistory::WillActivate() { 636 void CompositorTimingHistory::WillActivate() {
510 DCHECK_EQ(base::TimeTicks(), start_activate_time_); 637 DCHECK_EQ(base::TimeTicks(), activate_start_time_);
511 start_activate_time_ = Now(); 638 activate_start_time_ = Now();
512 } 639 }
513 640
514 void CompositorTimingHistory::DidActivate() { 641 void CompositorTimingHistory::DidActivate() {
515 DCHECK_NE(base::TimeTicks(), start_activate_time_); 642 DCHECK_NE(base::TimeTicks(), activate_start_time_);
516 base::TimeDelta activate_duration = Now() - start_activate_time_; 643 base::TimeDelta activate_duration = Now() - activate_start_time_;
517 644
518 uma_reporter_->AddActivateDuration(activate_duration, 645 uma_reporter_->AddActivateDuration(activate_duration,
519 ActivateDurationEstimate(), enabled_); 646 ActivateDurationEstimate(), enabled_);
520 if (enabled_) 647 if (enabled_)
521 activate_duration_history_.InsertSample(activate_duration); 648 activate_duration_history_.InsertSample(activate_duration);
522 649
523 start_activate_time_ = base::TimeTicks(); 650 activate_start_time_ = base::TimeTicks();
524 } 651 }
525 652
526 void CompositorTimingHistory::WillDraw() { 653 void CompositorTimingHistory::WillDraw() {
527 DCHECK_EQ(base::TimeTicks(), start_draw_time_); 654 DCHECK_EQ(base::TimeTicks(), draw_start_time_);
528 start_draw_time_ = Now(); 655 draw_start_time_ = Now();
529 } 656 }
530 657
531 void CompositorTimingHistory::DidDraw() { 658 void CompositorTimingHistory::DidDraw(bool used_new_active_tree) {
532 DCHECK_NE(base::TimeTicks(), start_draw_time_); 659 DCHECK_NE(base::TimeTicks(), draw_start_time_);
533 base::TimeDelta draw_duration = Now() - start_draw_time_; 660 base::TimeTicks draw_end_time = Now();
661 base::TimeDelta draw_duration = draw_end_time - draw_start_time_;
534 662
535 // Before adding the new data point to the timing history, see what we would 663 // Before adding the new data point to the timing history, see what we would
536 // have predicted for this frame. This allows us to keep track of the accuracy 664 // have predicted for this frame. This allows us to keep track of the accuracy
537 // of our predictions. 665 // of our predictions.
538 base::TimeDelta draw_estimate = DrawDurationEstimate(); 666 base::TimeDelta draw_estimate = DrawDurationEstimate();
539 rendering_stats_instrumentation_->AddDrawDuration(draw_duration, 667 rendering_stats_instrumentation_->AddDrawDuration(draw_duration,
540 draw_estimate); 668 draw_estimate);
541 669
542 uma_reporter_->AddDrawDuration(draw_duration, draw_estimate, enabled_); 670 uma_reporter_->AddDrawDuration(draw_duration, draw_estimate, enabled_);
543 671
544 if (enabled_) { 672 if (enabled_) {
545 draw_duration_history_.InsertSample(draw_duration); 673 draw_duration_history_.InsertSample(draw_duration);
546 } 674 }
547 675
548 start_draw_time_ = base::TimeTicks(); 676 SetCompositorDrawingContinuously(true);
677 if (!draw_end_time_prev_.is_null()) {
678 base::TimeDelta draw_interval = draw_end_time - draw_end_time_prev_;
679 uma_reporter_->AddDrawInterval(draw_interval);
680 }
681 draw_end_time_prev_ = draw_end_time;
682
683 if (begin_main_frame_committing_continuously_ && used_new_active_tree) {
684 if (!new_active_tree_draw_end_time_prev_.is_null()) {
685 base::TimeDelta draw_interval =
686 draw_end_time - new_active_tree_draw_end_time_prev_;
687 uma_reporter_->AddCommitInterval(draw_interval);
688 }
689 new_active_tree_draw_end_time_prev_ = draw_end_time;
690 }
691
692 draw_start_time_ = base::TimeTicks();
549 } 693 }
550 694
551 void CompositorTimingHistory::DidSwapBuffers() { 695 void CompositorTimingHistory::DidSwapBuffers() {
552 DCHECK_EQ(base::TimeTicks(), swap_start_time_); 696 DCHECK_EQ(base::TimeTicks(), swap_start_time_);
553 swap_start_time_ = Now(); 697 swap_start_time_ = Now();
554 } 698 }
555 699
556 void CompositorTimingHistory::DidSwapBuffersComplete() { 700 void CompositorTimingHistory::DidSwapBuffersComplete() {
557 DCHECK_NE(base::TimeTicks(), swap_start_time_); 701 DCHECK_NE(base::TimeTicks(), swap_start_time_);
558 base::TimeDelta swap_to_ack_duration = Now() - swap_start_time_; 702 base::TimeDelta swap_to_ack_duration = Now() - swap_start_time_;
559 uma_reporter_->AddSwapToAckLatency(swap_to_ack_duration); 703 uma_reporter_->AddSwapToAckLatency(swap_to_ack_duration);
560 swap_start_time_ = base::TimeTicks(); 704 swap_start_time_ = base::TimeTicks();
561 } 705 }
562 706
563 void CompositorTimingHistory::DidSwapBuffersReset() { 707 void CompositorTimingHistory::DidSwapBuffersReset() {
564 swap_start_time_ = base::TimeTicks(); 708 swap_start_time_ = base::TimeTicks();
565 } 709 }
566 710
567 } // namespace cc 711 } // namespace cc
OLDNEW
« no previous file with comments | « cc/scheduler/compositor_timing_history.h ('k') | cc/scheduler/compositor_timing_history_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698