Index: cc/scheduler/scheduler.cc |
diff --git a/cc/scheduler/scheduler.cc b/cc/scheduler/scheduler.cc |
index 5c515b2512e210919d95dcd82593359861777cdf..d88bfa42dee656486b830d92a686cd302e685d1c 100644 |
--- a/cc/scheduler/scheduler.cc |
+++ b/cc/scheduler/scheduler.cc |
@@ -398,6 +398,21 @@ void Scheduler::SetupPollingMechanisms(bool needs_begin_frame) { |
bool Scheduler::OnBeginFrameMixInDelegate(const BeginFrameArgs& args) { |
TRACE_EVENT1("cc", "Scheduler::BeginFrame", "args", args.AsValue()); |
+ // Deliver BeginFrames to children. |
+ if (settings_.forward_begin_frames_to_children && |
+ state_machine_.children_need_begin_frames()) { |
+ BeginFrameArgs adjusted_args_for_children(args); |
+ // Adjust a deadline for child schedulers. |
+ // TODO(simonhong): Once we have commitless update, we can get rid of |
+ // BeginMainFrameToCommitDurationEstimate() + |
+ // CommitToActivateDurationEstimate(). |
+ adjusted_args_for_children.deadline -= |
+ (client_->BeginMainFrameToCommitDurationEstimate() + |
+ client_->CommitToActivateDurationEstimate() + |
+ client_->DrawDurationEstimate() + EstimatedParentDrawTime()); |
+ client_->SendBeginFramesToChildren(adjusted_args_for_children); |
+ } |
+ |
// We have just called SetNeedsBeginFrame(true) and the BeginFrameSource has |
// sent us the last BeginFrame we have missed. As we might not be able to |
// actually make rendering for this call, handle it like a "retro frame". |
@@ -433,6 +448,13 @@ bool Scheduler::OnBeginFrameMixInDelegate(const BeginFrameArgs& args) { |
return true; |
} |
+void Scheduler::SetChildrenNeedBeginFrames(bool children_need_begin_frames) { |
+ DCHECK(settings_.forward_begin_frames_to_children); |
+ |
+ state_machine_.SetChildrenNeedBeginFrames(children_need_begin_frames); |
+ ProcessScheduledActions(); |
brianderson
2014/11/19 19:03:34
This should not trigger any new actions in the Bro
simonhong
2014/11/20 16:24:09
Done.
|
+} |
+ |
// BeginRetroFrame is called for BeginFrames that we've deferred because |
// the scheduler was in the middle of processing a previous BeginFrame. |
void Scheduler::BeginRetroFrame() { |