Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1371)

Unified Diff: cc/scheduler/scheduler.cc

Issue 23498035: cc: Always use SetNeedsBeginFrame to request the next BeginFrame (Closed) Base URL: http://git.chromium.org/chromium/src.git@epenner23495022
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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() {

Powered by Google App Engine
This is Rietveld 408576698