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

Unified Diff: cc/scheduler/compositor_timing_history.cc

Issue 1681393003: cc: Add MainAndImplFrameTimeDelta UMA. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: - active_tree_needs_first_draw_ = true Created 4 years, 10 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 side-by-side diff with in-line comments
Download patch
« 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 »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/scheduler/compositor_timing_history.cc
diff --git a/cc/scheduler/compositor_timing_history.cc b/cc/scheduler/compositor_timing_history.cc
index f546062235dff94243504d07b3f5781bd36d3c4c..ab1cd044ec03898063e264f82e69677a149d50c3 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 AddMainAndImplFrameTimeDelta(base::TimeDelta delta) = 0;
};
namespace {
@@ -217,6 +220,11 @@ class RendererUMAReporter : public CompositorTimingHistory::UMAReporter {
UMA_HISTOGRAM_CUSTOM_TIMES_MICROS("Scheduling.Renderer.SwapToAckLatency",
duration);
}
+
+ void AddMainAndImplFrameTimeDelta(base::TimeDelta delta) override {
+ UMA_HISTOGRAM_CUSTOM_TIMES_MICROS(
+ "Scheduling.Renderer.MainAndImplFrameTimeDelta", delta);
+ }
};
class BrowserUMAReporter : public CompositorTimingHistory::UMAReporter {
@@ -298,6 +306,11 @@ class BrowserUMAReporter : public CompositorTimingHistory::UMAReporter {
UMA_HISTOGRAM_CUSTOM_TIMES_MICROS("Scheduling.Browser.SwapToAckLatency",
duration);
}
+
+ void AddMainAndImplFrameTimeDelta(base::TimeDelta delta) override {
+ UMA_HISTOGRAM_CUSTOM_TIMES_MICROS(
+ "Scheduling.Browser.MainAndImplFrameTimeDelta", delta);
+ }
};
class NullUMAReporter : public CompositorTimingHistory::UMAReporter {
@@ -332,14 +345,18 @@ class NullUMAReporter : public CompositorTimingHistory::UMAReporter {
base::TimeDelta estimate,
bool affects_estimate) override {}
void AddSwapToAckLatency(base::TimeDelta duration) override {}
+ void AddMainAndImplFrameTimeDelta(base::TimeDelta delta) override {}
};
} // namespace
CompositorTimingHistory::CompositorTimingHistory(
+ bool using_synchronous_renderer_compositor,
UMACategory uma_category,
RenderingStatsInstrumentation* rendering_stats_instrumentation)
- : enabled_(false),
+ : using_synchronous_renderer_compositor_(
+ using_synchronous_renderer_compositor),
+ enabled_(false),
did_send_begin_main_frame_(false),
begin_main_frame_needed_continuously_(false),
begin_main_frame_committing_continuously_(false),
@@ -478,6 +495,12 @@ base::TimeDelta CompositorTimingHistory::DrawDurationEstimate() const {
return draw_duration_history_.Percentile(kDrawEstimationPercentile);
}
+void CompositorTimingHistory::DidCreateAndInitializeOutputSurface() {
+ // After we get a new output surface, we won't get a spurious
+ // swap ack from the old output surface.
+ swap_start_time_ = base::TimeTicks();
+}
+
void CompositorTimingHistory::WillBeginImplFrame(
bool new_active_tree_is_likely) {
// The check for whether a BeginMainFrame was sent anytime between two
@@ -505,10 +528,15 @@ void CompositorTimingHistory::BeginImplFrameNotExpectedSoon() {
SetCompositorDrawingContinuously(false);
}
-void CompositorTimingHistory::WillBeginMainFrame(bool on_critical_path) {
+void CompositorTimingHistory::WillBeginMainFrame(
+ bool on_critical_path,
+ base::TimeTicks main_frame_time) {
DCHECK_EQ(base::TimeTicks(), begin_main_frame_sent_time_);
+ DCHECK_EQ(base::TimeTicks(), begin_main_frame_frame_time_);
+
begin_main_frame_on_critical_path_ = on_critical_path;
begin_main_frame_sent_time_ = Now();
+ begin_main_frame_frame_time_ = main_frame_time;
did_send_begin_main_frame_ = true;
SetBeginMainFrameNeededContinuously(true);
@@ -524,11 +552,15 @@ void CompositorTimingHistory::BeginMainFrameStarted(
void CompositorTimingHistory::BeginMainFrameAborted() {
SetBeginMainFrameCommittingContinuously(false);
DidBeginMainFrame();
+ begin_main_frame_frame_time_ = base::TimeTicks();
}
void CompositorTimingHistory::DidCommit() {
+ DCHECK_EQ(base::TimeTicks(), pending_tree_main_frame_time_);
SetBeginMainFrameCommittingContinuously(true);
DidBeginMainFrame();
+ pending_tree_main_frame_time_ = begin_main_frame_frame_time_;
+ begin_main_frame_frame_time_ = base::TimeTicks();
}
void CompositorTimingHistory::DidBeginMainFrame() {
@@ -666,7 +698,13 @@ void CompositorTimingHistory::DidActivate() {
if (enabled_)
activate_duration_history_.InsertSample(activate_duration);
+ // The synchronous compositor doesn't necessarily draw every new active tree.
+ if (!using_synchronous_renderer_compositor_)
+ DCHECK_EQ(base::TimeTicks(), active_tree_main_frame_time_);
+ active_tree_main_frame_time_ = pending_tree_main_frame_time_;
+
activate_start_time_ = base::TimeTicks();
+ pending_tree_main_frame_time_ = base::TimeTicks();
}
void CompositorTimingHistory::WillDraw() {
@@ -674,7 +712,13 @@ void CompositorTimingHistory::WillDraw() {
draw_start_time_ = Now();
}
-void CompositorTimingHistory::DidDraw(bool used_new_active_tree) {
+void CompositorTimingHistory::DrawAborted() {
+ active_tree_main_frame_time_ = base::TimeTicks();
+}
+
+void CompositorTimingHistory::DidDraw(bool used_new_active_tree,
+ bool main_thread_missed_last_deadline,
+ base::TimeTicks impl_frame_time) {
DCHECK_NE(base::TimeTicks(), draw_start_time_);
base::TimeTicks draw_end_time = Now();
base::TimeDelta draw_duration = draw_end_time - draw_start_time_;
@@ -699,13 +743,26 @@ 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) {
+ DCHECK_NE(base::TimeTicks(), active_tree_main_frame_time_);
+ base::TimeDelta main_and_impl_delta =
+ impl_frame_time - active_tree_main_frame_time_;
+ DCHECK_GE(main_and_impl_delta, base::TimeDelta());
+ if (!using_synchronous_renderer_compositor_) {
+ DCHECK_EQ(main_thread_missed_last_deadline,
+ !main_and_impl_delta.is_zero());
+ }
+ uma_reporter_->AddMainAndImplFrameTimeDelta(main_and_impl_delta);
+ active_tree_main_frame_time_ = base::TimeTicks();
+
+ 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();
@@ -723,8 +780,4 @@ void CompositorTimingHistory::DidSwapBuffersComplete() {
swap_start_time_ = base::TimeTicks();
}
-void CompositorTimingHistory::DidSwapBuffersReset() {
- swap_start_time_ = base::TimeTicks();
-}
-
} // namespace cc
« 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