Index: cc/scheduler/compositor_timing_history.cc |
diff --git a/cc/scheduler/compositor_timing_history.cc b/cc/scheduler/compositor_timing_history.cc |
index 8c1bbe366d61c1201e2c4296103e698435ee5f47..e82356baeb412e8c427415134fef4dbb55b449d4 100644 |
--- a/cc/scheduler/compositor_timing_history.cc |
+++ b/cc/scheduler/compositor_timing_history.cc |
@@ -38,6 +38,7 @@ class CompositorTimingHistory::UMAReporter { |
virtual void AddDrawDuration(base::TimeDelta duration, |
base::TimeDelta estimate, |
bool affects_estimate) = 0; |
+ virtual void AddSwapToAckLatency(base::TimeDelta duration) = 0; |
}; |
namespace { |
@@ -179,6 +180,11 @@ class RendererUMAReporter : public CompositorTimingHistory::UMAReporter { |
REPORT_COMPOSITOR_TIMING_HISTORY_UMA("Renderer", "Draw"); |
DeprecatedDrawDurationUMA(duration, estimate); |
} |
+ |
+ void AddSwapToAckLatency(base::TimeDelta duration) override { |
+ UMA_HISTOGRAM_CUSTOM_TIMES_MICROS("Scheduling.Renderer.SwapToAckLatency", |
+ duration); |
+ } |
}; |
class BrowserUMAReporter : public CompositorTimingHistory::UMAReporter { |
@@ -235,6 +241,11 @@ class BrowserUMAReporter : public CompositorTimingHistory::UMAReporter { |
REPORT_COMPOSITOR_TIMING_HISTORY_UMA("Browser", "Draw"); |
DeprecatedDrawDurationUMA(duration, estimate); |
} |
+ |
+ void AddSwapToAckLatency(base::TimeDelta duration) override { |
+ UMA_HISTOGRAM_CUSTOM_TIMES_MICROS("Scheduling.Browser.SwapToAckLatency", |
+ duration); |
+ } |
}; |
class NullUMAReporter : public CompositorTimingHistory::UMAReporter { |
@@ -263,6 +274,7 @@ class NullUMAReporter : public CompositorTimingHistory::UMAReporter { |
void AddDrawDuration(base::TimeDelta duration, |
base::TimeDelta estimate, |
bool affects_estimate) override {} |
+ void AddSwapToAckLatency(base::TimeDelta duration) override {} |
}; |
} // namespace |
@@ -536,4 +548,20 @@ void CompositorTimingHistory::DidDraw() { |
start_draw_time_ = base::TimeTicks(); |
} |
+void CompositorTimingHistory::DidSwapBuffers() { |
+ DCHECK_EQ(base::TimeTicks(), swap_start_time_); |
+ swap_start_time_ = Now(); |
+} |
+ |
+void CompositorTimingHistory::DidSwapBuffersComplete() { |
+ DCHECK_NE(base::TimeTicks(), swap_start_time_); |
+ base::TimeDelta swap_to_ack_duration = Now() - swap_start_time_; |
+ uma_reporter_->AddSwapToAckLatency(swap_to_ack_duration); |
+ swap_start_time_ = base::TimeTicks(); |
+} |
+ |
+void CompositorTimingHistory::DidSwapBuffersReset() { |
+ swap_start_time_ = base::TimeTicks(); |
+} |
+ |
} // namespace cc |