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

Unified Diff: cc/scheduler/compositor_timing_history.cc

Issue 1432463002: cc: Track BeginMainFrame more precisely in CompositorTimingHistory. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed unit tests. New tests to be added. Created 5 years, 1 month 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
Index: cc/scheduler/compositor_timing_history.cc
diff --git a/cc/scheduler/compositor_timing_history.cc b/cc/scheduler/compositor_timing_history.cc
index 34726d5ddf8795792d6f0fa7a85aeef5ba9193de..28369b4c03fc83a933861a88d31297bfa28b0073 100644
--- a/cc/scheduler/compositor_timing_history.cc
+++ b/cc/scheduler/compositor_timing_history.cc
@@ -17,6 +17,18 @@ class CompositorTimingHistory::UMAReporter {
virtual void AddBeginMainFrameToCommitDuration(base::TimeDelta duration,
base::TimeDelta estimate,
bool affects_estimate) = 0;
+ virtual void AddBeginMainFrameQueueDurationCriticalDuration(
+ base::TimeDelta duration,
+ base::TimeDelta estimate,
+ bool affects_estimate) = 0;
+ virtual void AddBeginMainFrameQueueDurationNotCriticalDuration(
+ base::TimeDelta duration,
+ base::TimeDelta estimate,
+ bool affects_estimate) = 0;
+ virtual void AddBeginMainFrameStartToCommitDuration(
+ base::TimeDelta duration,
+ base::TimeDelta estimate,
+ bool affects_estimate) = 0;
virtual void AddCommitToReadyToActivateDuration(base::TimeDelta duration,
base::TimeDelta estimate,
bool affects_estimate) = 0;
@@ -39,6 +51,9 @@ namespace {
// TODO(brianderson): Fine tune the percentiles below.
const size_t kDurationHistorySize = 60;
const double kBeginMainFrameToCommitEstimationPercentile = 90.0;
+const double kBeginMainFrameQueueDurationCriticalEstimationPercentile = 90.0;
+const double kBeginMainFrameQueueDurationNotCriticalEstimationPercentile = 90.0;
+const double kBeginMainFrameStartToCommitEstimationPercentile = 90.0;
const double kCommitToReadyToActivateEstimationPercentile = 90.0;
const double kPrepareTilesEstimationPercentile = 90.0;
const double kActivateEstimationPercentile = 90.0;
@@ -110,6 +125,29 @@ class RendererUMAReporter : public CompositorTimingHistory::UMAReporter {
REPORT_COMPOSITOR_TIMING_HISTORY_UMA("Renderer", "BeginMainFrameToCommit");
}
+ void AddBeginMainFrameQueueDurationCriticalDuration(
+ base::TimeDelta duration,
+ base::TimeDelta estimate,
+ bool affects_estimate) override {
+ REPORT_COMPOSITOR_TIMING_HISTORY_UMA("Renderer",
+ "BeginMainFrameQueueDurationCritical");
+ }
+
+ void AddBeginMainFrameQueueDurationNotCriticalDuration(
+ base::TimeDelta duration,
+ base::TimeDelta estimate,
+ bool affects_estimate) override {
+ REPORT_COMPOSITOR_TIMING_HISTORY_UMA(
+ "Renderer", "BeginMainFrameQueueDurationNotCritical");
+ }
+
+ void AddBeginMainFrameStartToCommitDuration(base::TimeDelta duration,
+ base::TimeDelta estimate,
+ bool affects_estimate) override {
+ REPORT_COMPOSITOR_TIMING_HISTORY_UMA("Renderer",
+ "BeginMainFrameStartToCommit");
+ }
+
void AddCommitToReadyToActivateDuration(base::TimeDelta duration,
base::TimeDelta estimate,
bool affects_estimate) override {
@@ -146,6 +184,29 @@ class BrowserUMAReporter : public CompositorTimingHistory::UMAReporter {
REPORT_COMPOSITOR_TIMING_HISTORY_UMA("Browser", "BeginMainFrameToCommit");
}
+ void AddBeginMainFrameQueueDurationCriticalDuration(
+ base::TimeDelta duration,
+ base::TimeDelta estimate,
+ bool affects_estimate) override {
+ REPORT_COMPOSITOR_TIMING_HISTORY_UMA("Browser",
+ "BeginMainFrameQueueDurationCritical");
+ }
+
+ void AddBeginMainFrameQueueDurationNotCriticalDuration(
+ base::TimeDelta duration,
+ base::TimeDelta estimate,
+ bool affects_estimate) override {
+ REPORT_COMPOSITOR_TIMING_HISTORY_UMA(
+ "Browser", "BeginMainFrameQueueDurationNotCritical");
+ }
+
+ void AddBeginMainFrameStartToCommitDuration(base::TimeDelta duration,
+ base::TimeDelta estimate,
+ bool affects_estimate) override {
+ REPORT_COMPOSITOR_TIMING_HISTORY_UMA("Browser",
+ "BeginMainFrameStartToCommit");
+ }
+
void AddCommitToReadyToActivateDuration(base::TimeDelta duration,
base::TimeDelta estimate,
bool affects_estimate) override {
@@ -181,6 +242,17 @@ class NullUMAReporter : public CompositorTimingHistory::UMAReporter {
void AddBeginMainFrameToCommitDuration(base::TimeDelta duration,
base::TimeDelta estimate,
bool affects_estimate) override {}
+ void AddBeginMainFrameQueueDurationCriticalDuration(
+ base::TimeDelta duration,
+ base::TimeDelta estimate,
+ bool affects_estimate) override {}
+ void AddBeginMainFrameQueueDurationNotCriticalDuration(
+ base::TimeDelta duration,
+ base::TimeDelta estimate,
+ bool affects_estimate) override {}
+ void AddBeginMainFrameStartToCommitDuration(base::TimeDelta duration,
+ base::TimeDelta estimate,
+ bool affects_estimate) override {}
void AddCommitToReadyToActivateDuration(base::TimeDelta duration,
base::TimeDelta estimate,
bool affects_estimate) override {}
@@ -198,11 +270,16 @@ CompositorTimingHistory::CompositorTimingHistory(
UMACategory uma_category,
RenderingStatsInstrumentation* rendering_stats_instrumentation)
: enabled_(false),
- begin_main_frame_to_commit_duration_history_(kDurationHistorySize),
+ begin_main_frame_sent_to_commit_duration_history_(kDurationHistorySize),
+ begin_main_frame_queue_duration_critical_history_(kDurationHistorySize),
+ begin_main_frame_queue_duration_not_critical_history_(
+ kDurationHistorySize),
+ begin_main_frame_start_to_commit_duration_history_(kDurationHistorySize),
commit_to_ready_to_activate_duration_history_(kDurationHistorySize),
prepare_tiles_duration_history_(kDurationHistorySize),
activate_duration_history_(kDurationHistorySize),
draw_duration_history_(kDurationHistorySize),
+ begin_main_frame_on_critical_path_(false),
uma_reporter_(CreateUMAReporter(uma_category)),
rendering_stats_instrumentation_(rendering_stats_instrumentation) {}
@@ -250,11 +327,30 @@ void CompositorTimingHistory::SetRecordingEnabled(bool enabled) {
base::TimeDelta
CompositorTimingHistory::BeginMainFrameToCommitDurationEstimate() const {
- return begin_main_frame_to_commit_duration_history_.Percentile(
+ return begin_main_frame_sent_to_commit_duration_history_.Percentile(
kBeginMainFrameToCommitEstimationPercentile);
}
base::TimeDelta
+CompositorTimingHistory::BeginMainFrameQueueDurationCriticalEstimate() const {
+ return begin_main_frame_queue_duration_critical_history_.Percentile(
+ kBeginMainFrameQueueDurationCriticalEstimationPercentile);
+}
+
+base::TimeDelta
+CompositorTimingHistory::BeginMainFrameQueueDurationNotCriticalEstimate()
+ const {
+ return begin_main_frame_queue_duration_not_critical_history_.Percentile(
+ kBeginMainFrameQueueDurationNotCriticalEstimationPercentile);
+}
+
+base::TimeDelta
+CompositorTimingHistory::BeginMainFrameStartToCommitDurationEstimate() const {
+ return begin_main_frame_start_to_commit_duration_history_.Percentile(
+ kBeginMainFrameStartToCommitEstimationPercentile);
+}
+
+base::TimeDelta
CompositorTimingHistory::CommitToReadyToActivateDurationEstimate() const {
return commit_to_ready_to_activate_duration_history_.Percentile(
kCommitToReadyToActivateEstimationPercentile);
@@ -273,11 +369,19 @@ base::TimeDelta CompositorTimingHistory::DrawDurationEstimate() const {
return draw_duration_history_.Percentile(kDrawEstimationPercentile);
}
-void CompositorTimingHistory::WillBeginMainFrame() {
+void CompositorTimingHistory::WillBeginMainFrame(bool on_critical_path) {
DCHECK_EQ(base::TimeTicks(), begin_main_frame_sent_time_);
+ begin_main_frame_on_critical_path_ = on_critical_path;
begin_main_frame_sent_time_ = Now();
}
+void CompositorTimingHistory::BeginMainFrameStarted(
+ base::TimeTicks main_thread_start_time) {
+ DCHECK_NE(base::TimeTicks(), begin_main_frame_sent_time_);
+ DCHECK_EQ(base::TimeTicks(), begin_main_frame_start_time_);
+ begin_main_frame_start_time_ = main_thread_start_time;
+}
+
void CompositorTimingHistory::BeginMainFrameAborted() {
DidCommit();
}
@@ -287,8 +391,17 @@ void CompositorTimingHistory::DidCommit() {
commit_time_ = Now();
- base::TimeDelta begin_main_frame_to_commit_duration =
+ bool begin_main_frame_start_time_is_valid =
+ !begin_main_frame_start_time_.is_null();
+ if (!begin_main_frame_start_time_is_valid)
+ begin_main_frame_start_time_ = begin_main_frame_sent_time_;
+
+ base::TimeDelta begin_main_frame_sent_to_commit_duration =
commit_time_ - begin_main_frame_sent_time_;
+ base::TimeDelta begin_main_frame_queue_duration =
+ begin_main_frame_start_time_ - begin_main_frame_sent_time_;
+ base::TimeDelta begin_main_frame_start_to_commit_duration =
+ commit_time_ - begin_main_frame_start_time_;
// Before adding the new data point to the timing history, see what we would
// have predicted for this frame. This allows us to keep track of the accuracy
@@ -296,17 +409,44 @@ void CompositorTimingHistory::DidCommit() {
base::TimeDelta begin_main_frame_to_commit_estimate =
BeginMainFrameToCommitDurationEstimate();
uma_reporter_->AddBeginMainFrameToCommitDuration(
- begin_main_frame_to_commit_duration, begin_main_frame_to_commit_estimate,
- enabled_);
+ begin_main_frame_sent_to_commit_duration,
+ begin_main_frame_to_commit_estimate, enabled_);
rendering_stats_instrumentation_->AddBeginMainFrameToCommitDuration(
- begin_main_frame_to_commit_duration, begin_main_frame_to_commit_estimate);
+ begin_main_frame_sent_to_commit_duration,
+ begin_main_frame_to_commit_estimate);
+
+ if (begin_main_frame_start_time_is_valid) {
+ if (begin_main_frame_on_critical_path_) {
+ uma_reporter_->AddBeginMainFrameQueueDurationCriticalDuration(
+ begin_main_frame_queue_duration,
+ BeginMainFrameQueueDurationCriticalEstimate(), enabled_);
+ } else {
+ uma_reporter_->AddBeginMainFrameQueueDurationNotCriticalDuration(
+ begin_main_frame_queue_duration,
+ BeginMainFrameQueueDurationNotCriticalEstimate(), enabled_);
+ }
+ }
+
+ uma_reporter_->AddBeginMainFrameStartToCommitDuration(
+ begin_main_frame_start_to_commit_duration,
+ BeginMainFrameStartToCommitDurationEstimate(), enabled_);
if (enabled_) {
- begin_main_frame_to_commit_duration_history_.InsertSample(
- begin_main_frame_to_commit_duration);
+ begin_main_frame_sent_to_commit_duration_history_.InsertSample(
+ begin_main_frame_sent_to_commit_duration);
+ if (begin_main_frame_on_critical_path_) {
+ begin_main_frame_queue_duration_critical_history_.InsertSample(
+ begin_main_frame_queue_duration);
+ } else {
+ begin_main_frame_queue_duration_not_critical_history_.InsertSample(
+ begin_main_frame_queue_duration);
+ }
+ begin_main_frame_start_to_commit_duration_history_.InsertSample(
+ begin_main_frame_start_to_commit_duration);
}
begin_main_frame_sent_time_ = base::TimeTicks();
+ begin_main_frame_start_time_ = base::TimeTicks();
}
void CompositorTimingHistory::WillPrepareTiles() {

Powered by Google App Engine
This is Rietveld 408576698