| Index: cc/scheduler/scheduler.cc
|
| diff --git a/cc/scheduler/scheduler.cc b/cc/scheduler/scheduler.cc
|
| index cf994fb222028383612438f74aa8331fde298d4c..ebdc289b18e50082e00ff9cac20698d227e00f0b 100644
|
| --- a/cc/scheduler/scheduler.cc
|
| +++ b/cc/scheduler/scheduler.cc
|
| @@ -151,7 +151,23 @@ void Scheduler::SetupNextBeginFrameIfNeeded() {
|
| if (state_machine_.inside_begin_frame() && has_pending_begin_frame_) {
|
| has_pending_begin_frame_ = false;
|
| client_->SetNeedsBeginFrameOnImplThread(true);
|
| - return;
|
| + }
|
| +
|
| + // Setup PollForAnticipatedDrawTriggers for cases where we want a proactive
|
| + // BeginFrame but aren't requesting one.
|
| + if (!needs_begin_frame &&
|
| + state_machine_.ProactiveBeginFrameWantedByImplThread()) {
|
| + if (poll_for_draw_triggers_closure_.IsCancelled()) {
|
| + poll_for_draw_triggers_closure_.Reset(
|
| + base::Bind(&Scheduler::PollForAnticipatedDrawTriggers,
|
| + weak_factory_.GetWeakPtr()));
|
| + base::MessageLoop::current()->PostDelayedTask(
|
| + FROM_HERE,
|
| + poll_for_draw_triggers_closure_.callback(),
|
| + last_begin_frame_args_.interval);
|
| + }
|
| + } else {
|
| + poll_for_draw_triggers_closure_.Cancel();
|
| }
|
| }
|
|
|
| @@ -165,6 +181,12 @@ void Scheduler::BeginFrame(const BeginFrameArgs& args) {
|
| state_machine_.DidLeaveBeginFrame();
|
| }
|
|
|
| +void Scheduler::PollForAnticipatedDrawTriggers() {
|
| + TRACE_EVENT0("cc", "Scheduler::PollForAnticipatedDrawTriggers");
|
| + state_machine_.PollForAnticipatedDrawTriggers();
|
| + ProcessScheduledActions();
|
| +}
|
| +
|
| void Scheduler::DrawAndSwapIfPossible() {
|
| DrawSwapReadbackResult result =
|
| client_->ScheduledActionDrawAndSwapIfPossible();
|
|
|