| Index: cc/scheduler/scheduler.cc
|
| diff --git a/cc/scheduler/scheduler.cc b/cc/scheduler/scheduler.cc
|
| index d638f6d2bb42c645ddde779643e43c48a4f4ecb9..14f6c7fe2f1d1d9eb9a1a7bddb078101631569e4 100644
|
| --- a/cc/scheduler/scheduler.cc
|
| +++ b/cc/scheduler/scheduler.cc
|
| @@ -17,7 +17,6 @@ Scheduler::Scheduler(SchedulerClient* client,
|
| client_(client),
|
| weak_factory_(this),
|
| last_set_needs_begin_frame_(false),
|
| - has_pending_begin_frame_(false),
|
| state_machine_(scheduler_settings),
|
| inside_process_scheduled_actions_(false),
|
| inside_action_(SchedulerStateMachine::ACTION_NONE) {
|
| @@ -102,7 +101,6 @@ void Scheduler::DidLoseOutputSurface() {
|
| void Scheduler::DidCreateAndInitializeOutputSurface() {
|
| TRACE_EVENT0("cc", "Scheduler::DidCreateAndInitializeOutputSurface");
|
| state_machine_.DidCreateAndInitializeOutputSurface();
|
| - has_pending_begin_frame_ = false;
|
| last_set_needs_begin_frame_ = false;
|
| ProcessScheduledActions();
|
| }
|
| @@ -137,29 +135,18 @@ void Scheduler::SetupNextBeginFrameIfNeeded() {
|
| settings_.throttle_frame_production;
|
| bool needs_begin_frame = needs_begin_frame_to_draw ||
|
| proactive_begin_frame_wanted;
|
| - bool immediate_disables_needed =
|
| - settings_.using_synchronous_renderer_compositor;
|
| -
|
| - // Determine if we need BeginFrame notifications.
|
| - // If we do, always request the BeginFrame immediately.
|
| - // If not, only disable on the next BeginFrame to avoid unnecessary toggles.
|
| - // The synchronous renderer compositor requires immediate disables though.
|
| - if ((needs_begin_frame ||
|
| - state_machine_.inside_begin_frame() ||
|
| - immediate_disables_needed) &&
|
| - (needs_begin_frame != last_set_needs_begin_frame_)) {
|
| - has_pending_begin_frame_ = false;
|
| +
|
| + bool should_call_set_needs_begin_frame =
|
| + // Always request the BeginFrame immediately if it wasn't needed before.
|
| + (needs_begin_frame && !last_set_needs_begin_frame_) ||
|
| + // We always need to explicitly request our next BeginFrame.
|
| + state_machine_.inside_begin_frame();
|
| +
|
| + if (should_call_set_needs_begin_frame) {
|
| client_->SetNeedsBeginFrameOnImplThread(needs_begin_frame);
|
| last_set_needs_begin_frame_ = needs_begin_frame;
|
| }
|
|
|
| - // Request another BeginFrame if we haven't drawn for now until we have
|
| - // deadlines implemented.
|
| - if (state_machine_.inside_begin_frame() && has_pending_begin_frame_) {
|
| - has_pending_begin_frame_ = false;
|
| - client_->SetNeedsBeginFrameOnImplThread(true);
|
| - }
|
| -
|
| // Setup PollForAnticipatedDrawTriggers for cases where we want a proactive
|
| // BeginFrame but aren't requesting one.
|
| if (!needs_begin_frame &&
|
| @@ -180,8 +167,7 @@ void Scheduler::SetupNextBeginFrameIfNeeded() {
|
|
|
| void Scheduler::BeginFrame(const BeginFrameArgs& args) {
|
| TRACE_EVENT0("cc", "Scheduler::BeginFrame");
|
| - DCHECK(!has_pending_begin_frame_);
|
| - has_pending_begin_frame_ = true;
|
| + DCHECK(!state_machine_.inside_begin_frame());
|
| last_begin_frame_args_ = args;
|
| state_machine_.DidEnterBeginFrame(args);
|
| ProcessScheduledActions();
|
| @@ -199,14 +185,10 @@ void Scheduler::DrawAndSwapIfPossible() {
|
| DrawSwapReadbackResult result =
|
| client_->ScheduledActionDrawAndSwapIfPossible();
|
| state_machine_.DidDrawIfPossibleCompleted(result.did_draw);
|
| - if (result.did_swap)
|
| - has_pending_begin_frame_ = false;
|
| }
|
|
|
| void Scheduler::DrawAndSwapForced() {
|
| - DrawSwapReadbackResult result = client_->ScheduledActionDrawAndSwapForced();
|
| - if (result.did_swap)
|
| - has_pending_begin_frame_ = false;
|
| + client_->ScheduledActionDrawAndSwapForced();
|
| }
|
|
|
| void Scheduler::DrawAndReadback() {
|
|
|