| Index: cc/scheduler/compositor_timing_history.cc
|
| diff --git a/cc/scheduler/compositor_timing_history.cc b/cc/scheduler/compositor_timing_history.cc
|
| index f3ac0670525bd31d389c2008aebfd5c743649364..478d5f86b62109040beb44d9914ebd1b2d8dc981 100644
|
| --- a/cc/scheduler/compositor_timing_history.cc
|
| +++ b/cc/scheduler/compositor_timing_history.cc
|
| @@ -50,6 +50,9 @@ class CompositorTimingHistory::UMAReporter {
|
| base::TimeDelta estimate,
|
| bool affects_estimate) = 0;
|
| virtual void AddSwapToAckLatency(base::TimeDelta duration) = 0;
|
| +
|
| + // Synchronization measurements
|
| + virtual void AddMainAndImplSynchronized(bool synchronized);
|
| };
|
|
|
| namespace {
|
| @@ -216,6 +219,11 @@ class RendererUMAReporter : public CompositorTimingHistory::UMAReporter {
|
| UMA_HISTOGRAM_CUSTOM_TIMES_MICROS("Scheduling.Renderer.SwapToAckLatency",
|
| duration);
|
| }
|
| +
|
| + void AddMainAndImplSynchronized(bool synchronized) override {
|
| + UMA_HISTOGRAM_BOOLEAN("Scheduling.Renderer.MainAndImplSynchronized",
|
| + synchronized);
|
| + }
|
| };
|
|
|
| class BrowserUMAReporter : public CompositorTimingHistory::UMAReporter {
|
| @@ -297,6 +305,11 @@ class BrowserUMAReporter : public CompositorTimingHistory::UMAReporter {
|
| UMA_HISTOGRAM_CUSTOM_TIMES_MICROS("Scheduling.Browser.SwapToAckLatency",
|
| duration);
|
| }
|
| +
|
| + void AddMainAndImplSynchronized(bool synchronized) override {
|
| + UMA_HISTOGRAM_BOOLEAN("Scheduling.Browser.MainAndImplSynchronized",
|
| + synchronized);
|
| + }
|
| };
|
|
|
| class NullUMAReporter : public CompositorTimingHistory::UMAReporter {
|
| @@ -331,6 +344,7 @@ class NullUMAReporter : public CompositorTimingHistory::UMAReporter {
|
| base::TimeDelta estimate,
|
| bool affects_estimate) override {}
|
| void AddSwapToAckLatency(base::TimeDelta duration) override {}
|
| + void AddMainAndImplSynchronized(bool synchronized) override {}
|
| };
|
|
|
| } // namespace
|
| @@ -658,7 +672,8 @@ void CompositorTimingHistory::WillDraw() {
|
| draw_start_time_ = Now();
|
| }
|
|
|
| -void CompositorTimingHistory::DidDraw(bool used_new_active_tree) {
|
| +void CompositorTimingHistory::DidDraw(bool used_new_active_tree,
|
| + bool main_thread_missed_last_deadline) {
|
| DCHECK_NE(base::TimeTicks(), draw_start_time_);
|
| base::TimeTicks draw_end_time = Now();
|
| base::TimeDelta draw_duration = draw_end_time - draw_start_time_;
|
| @@ -683,13 +698,17 @@ void CompositorTimingHistory::DidDraw(bool used_new_active_tree) {
|
| }
|
| draw_end_time_prev_ = draw_end_time;
|
|
|
| - if (begin_main_frame_committing_continuously_ && used_new_active_tree) {
|
| - if (!new_active_tree_draw_end_time_prev_.is_null()) {
|
| - base::TimeDelta draw_interval =
|
| - draw_end_time - new_active_tree_draw_end_time_prev_;
|
| - uma_reporter_->AddCommitInterval(draw_interval);
|
| + if (used_new_active_tree) {
|
| + uma_reporter_->AddMainAndImplSynchronized(
|
| + !main_thread_missed_last_deadline);
|
| + if (begin_main_frame_committing_continuously_) {
|
| + if (!new_active_tree_draw_end_time_prev_.is_null()) {
|
| + base::TimeDelta draw_interval =
|
| + draw_end_time - new_active_tree_draw_end_time_prev_;
|
| + uma_reporter_->AddCommitInterval(draw_interval);
|
| + }
|
| + new_active_tree_draw_end_time_prev_ = draw_end_time;
|
| }
|
| - new_active_tree_draw_end_time_prev_ = draw_end_time;
|
| }
|
|
|
| draw_start_time_ = base::TimeTicks();
|
|
|