Index: components/scheduler/renderer/idle_time_estimator.cc |
diff --git a/components/scheduler/renderer/idle_time_estimator.cc b/components/scheduler/renderer/idle_time_estimator.cc |
index 5d572a2831776854a41a2e03cf1ac1fbb2f83943..52e72da2eba36a009b958afba2ea72cc3f80893c 100644 |
--- a/components/scheduler/renderer/idle_time_estimator.cc |
+++ b/components/scheduler/renderer/idle_time_estimator.cc |
@@ -36,7 +36,8 @@ base::TimeDelta IdleTimeEstimator::GetExpectedIdleDuration( |
void IdleTimeEstimator::DidCommitFrameToCompositor() { |
// This will run inside of a WillProcessTask / DidProcessTask pair, let |
// DidProcessTask know a frame was comitted. |
- did_commit_ = true; |
+ if (nesting_level_ == 1) |
+ did_commit_ = true; |
} |
void IdleTimeEstimator::Clear() { |
@@ -54,11 +55,16 @@ void IdleTimeEstimator::SetTimeSourceForTesting( |
void IdleTimeEstimator::WillProcessTask(const base::PendingTask& pending_task) { |
nesting_level_++; |
- task_start_time_ = time_source_->NowTicks(); |
+ if (nesting_level_ == 1) |
+ task_start_time_ = time_source_->NowTicks(); |
} |
void IdleTimeEstimator::DidProcessTask(const base::PendingTask& pending_task) { |
- DCHECK_EQ(nesting_level_, 1); |
+ nesting_level_--; |
+ DCHECK_GE(nesting_level_, 0); |
+ if (nesting_level_ != 0) |
+ return; |
+ |
cumulative_compositor_runtime_ += time_source_->NowTicks() - task_start_time_; |
if (did_commit_) { |
@@ -67,7 +73,6 @@ void IdleTimeEstimator::DidProcessTask(const base::PendingTask& pending_task) { |
cumulative_compositor_runtime_ = base::TimeDelta(); |
did_commit_ = false; |
} |
- nesting_level_--; |
} |
} // namespace scheduler |