Index: cc/scheduler/scheduler.cc |
diff --git a/cc/scheduler/scheduler.cc b/cc/scheduler/scheduler.cc |
index ebdc289b18e50082e00ff9cac20698d227e00f0b..376ead2528eb1564bdcf7acc6dfdfe243d4e2ffc 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) { |
DCHECK(client_); |
@@ -95,7 +94,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(); |
} |
@@ -130,29 +128,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 && |
@@ -173,8 +160,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(); |
@@ -191,14 +177,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() { |