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(); |