Index: cc/scheduler/scheduler_state_machine.cc |
diff --git a/cc/scheduler/scheduler_state_machine.cc b/cc/scheduler/scheduler_state_machine.cc |
index 1f47e6145517b1c7449469d275036a05f056f67a..800f4131779189e3e5da873f3fe735f11405e59a 100644 |
--- a/cc/scheduler/scheduler_state_machine.cc |
+++ b/cc/scheduler/scheduler_state_machine.cc |
@@ -20,7 +20,7 @@ const int kMaxPendingSwaps = 1; |
SchedulerStateMachine::SchedulerStateMachine(const SchedulerSettings& settings) |
: settings_(settings), |
- output_surface_state_(OUTPUT_SURFACE_NONE), |
+ compositor_frame_sink_state_(COMPOSITOR_FRAME_SINK_NONE), |
begin_impl_frame_state_(BEGIN_IMPL_FRAME_STATE_IDLE), |
begin_main_frame_state_(BEGIN_MAIN_FRAME_STATE_IDLE), |
forced_redraw_state_(FORCED_REDRAW_STATE_IDLE), |
@@ -29,14 +29,14 @@ SchedulerStateMachine::SchedulerStateMachine(const SchedulerSettings& settings) |
last_frame_number_swap_performed_(-1), |
last_frame_number_draw_performed_(-1), |
last_frame_number_begin_main_frame_sent_(-1), |
- last_frame_number_invalidate_output_surface_performed_(-1), |
+ last_frame_number_invalidate_compositor_frame_sink_performed_(-1), |
draw_funnel_(false), |
send_begin_main_frame_funnel_(true), |
- invalidate_output_surface_funnel_(false), |
+ invalidate_compositor_frame_sink_funnel_(false), |
prepare_tiles_funnel_(0), |
consecutive_checkerboard_animations_(0), |
pending_swaps_(0), |
- swaps_with_current_output_surface_(0), |
+ swaps_with_current_compositor_frame_sink_(0), |
needs_redraw_(false), |
needs_prepare_tiles_(false), |
needs_begin_main_frame_(false), |
@@ -48,7 +48,7 @@ SchedulerStateMachine::SchedulerStateMachine(const SchedulerSettings& settings) |
has_pending_tree_(false), |
pending_tree_is_ready_for_activation_(false), |
active_tree_needs_first_draw_(false), |
- did_create_and_initialize_first_output_surface_(false), |
+ did_create_and_initialize_first_compositor_frame_sink_(false), |
tree_priority_(NEW_CONTENT_TAKES_PRIORITY), |
scroll_handler_state_( |
ScrollHandlerState::SCROLL_DOES_NOT_AFFECT_SCROLL_HANDLER), |
@@ -62,19 +62,19 @@ SchedulerStateMachine::SchedulerStateMachine(const SchedulerSettings& settings) |
did_draw_in_last_frame_(false), |
did_swap_in_last_frame_(false) {} |
-const char* SchedulerStateMachine::OutputSurfaceStateToString( |
- OutputSurfaceState state) { |
+const char* SchedulerStateMachine::CompositorFrameSinkStateToString( |
+ CompositorFrameSinkState state) { |
switch (state) { |
- case OUTPUT_SURFACE_NONE: |
- return "OUTPUT_SURFACE_NONE"; |
- case OUTPUT_SURFACE_ACTIVE: |
- return "OUTPUT_SURFACE_ACTIVE"; |
- case OUTPUT_SURFACE_CREATING: |
- return "OUTPUT_SURFACE_CREATING"; |
- case OUTPUT_SURFACE_WAITING_FOR_FIRST_COMMIT: |
- return "OUTPUT_SURFACE_WAITING_FOR_FIRST_COMMIT"; |
- case OUTPUT_SURFACE_WAITING_FOR_FIRST_ACTIVATION: |
- return "OUTPUT_SURFACE_WAITING_FOR_FIRST_ACTIVATION"; |
+ case COMPOSITOR_FRAME_SINK_NONE: |
+ return "COMPOSITOR_FRAME_SINK_NONE"; |
+ case COMPOSITOR_FRAME_SINK_ACTIVE: |
+ return "COMPOSITOR_FRAME_SINK_ACTIVE"; |
+ case COMPOSITOR_FRAME_SINK_CREATING: |
+ return "COMPOSITOR_FRAME_SINK_CREATING"; |
+ case COMPOSITOR_FRAME_SINK_WAITING_FOR_FIRST_COMMIT: |
+ return "COMPOSITOR_FRAME_SINK_WAITING_FOR_FIRST_COMMIT"; |
+ case COMPOSITOR_FRAME_SINK_WAITING_FOR_FIRST_ACTIVATION: |
+ return "COMPOSITOR_FRAME_SINK_WAITING_FOR_FIRST_ACTIVATION"; |
} |
NOTREACHED(); |
return "???"; |
@@ -175,12 +175,12 @@ const char* SchedulerStateMachine::ActionToString(Action action) { |
return "ACTION_DRAW_AND_SWAP_FORCED"; |
case ACTION_DRAW_AND_SWAP_ABORT: |
return "ACTION_DRAW_AND_SWAP_ABORT"; |
- case ACTION_BEGIN_OUTPUT_SURFACE_CREATION: |
- return "ACTION_BEGIN_OUTPUT_SURFACE_CREATION"; |
+ case ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION: |
+ return "ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION"; |
case ACTION_PREPARE_TILES: |
return "ACTION_PREPARE_TILES"; |
- case ACTION_INVALIDATE_OUTPUT_SURFACE: |
- return "ACTION_INVALIDATE_OUTPUT_SURFACE"; |
+ case ACTION_INVALIDATE_COMPOSITOR_FRAME_SINK: |
+ return "ACTION_INVALIDATE_COMPOSITOR_FRAME_SINK"; |
} |
NOTREACHED(); |
return "???"; |
@@ -202,8 +202,9 @@ void SchedulerStateMachine::AsValueInto( |
BeginImplFrameStateToString(begin_impl_frame_state_)); |
state->SetString("begin_main_frame_state", |
BeginMainFrameStateToString(begin_main_frame_state_)); |
- state->SetString("output_surface_state_", |
- OutputSurfaceStateToString(output_surface_state_)); |
+ state->SetString( |
+ "compositor_frame_sink_state_", |
+ CompositorFrameSinkStateToString(compositor_frame_sink_state_)); |
state->SetString("forced_redraw_state", |
ForcedRedrawOnTimeoutStateToString(forced_redraw_state_)); |
state->EndDictionary(); |
@@ -221,13 +222,13 @@ void SchedulerStateMachine::AsValueInto( |
state->SetBoolean("funnel: send_begin_main_frame_funnel", |
send_begin_main_frame_funnel_); |
state->SetInteger("funnel: prepare_tiles_funnel", prepare_tiles_funnel_); |
- state->SetBoolean("funnel: invalidate_output_surface_funnel", |
- invalidate_output_surface_funnel_); |
+ state->SetBoolean("funnel: invalidate_compositor_frame_sink_funnel", |
+ invalidate_compositor_frame_sink_funnel_); |
state->SetInteger("consecutive_checkerboard_animations", |
consecutive_checkerboard_animations_); |
state->SetInteger("pending_swaps_", pending_swaps_); |
- state->SetInteger("swaps_with_current_output_surface", |
- swaps_with_current_output_surface_); |
+ state->SetInteger("swaps_with_current_compositor_frame_sink", |
+ swaps_with_current_compositor_frame_sink_); |
state->SetBoolean("needs_redraw", needs_redraw_); |
state->SetBoolean("needs_prepare_tiles", needs_prepare_tiles_); |
state->SetBoolean("needs_begin_main_frame", needs_begin_main_frame_); |
@@ -242,8 +243,8 @@ void SchedulerStateMachine::AsValueInto( |
state->SetBoolean("active_tree_needs_first_draw", |
active_tree_needs_first_draw_); |
state->SetBoolean("wait_for_ready_to_draw", wait_for_ready_to_draw_); |
- state->SetBoolean("did_create_and_initialize_first_output_surface", |
- did_create_and_initialize_first_output_surface_); |
+ state->SetBoolean("did_create_and_initialize_first_compositor_frame_sink", |
+ did_create_and_initialize_first_compositor_frame_sink_); |
state->SetString("tree_priority", TreePriorityToString(tree_priority_)); |
state->SetString("scroll_handler_state", |
ScrollHandlerStateToString(scroll_handler_state_)); |
@@ -266,9 +267,10 @@ bool SchedulerStateMachine::PendingDrawsShouldBeAborted() const { |
// pending activations will be forced and draws will be aborted. However, |
// when the embedder is Android WebView, software draws could be scheduled by |
// the Android OS at any time and draws should not be aborted in this case. |
- bool is_output_surface_lost = (output_surface_state_ == OUTPUT_SURFACE_NONE); |
+ bool is_compositor_frame_sink_lost = |
+ (compositor_frame_sink_state_ == COMPOSITOR_FRAME_SINK_NONE); |
if (resourceless_draw_) |
- return is_output_surface_lost || !can_draw_; |
+ return is_compositor_frame_sink_lost || !can_draw_; |
// These are all the cases where we normally cannot or do not want to draw |
// but, if needs_redraw_ is true and we do not draw to make forward progress, |
@@ -276,7 +278,7 @@ bool SchedulerStateMachine::PendingDrawsShouldBeAborted() const { |
// This should be a superset of PendingActivationsShouldBeForced() since |
// activation of the pending tree is blocked by drawing of the active tree and |
// the main thread might be blocked on activation of the most recent commit. |
- return is_output_surface_lost || !can_draw_ || !visible_ || |
+ return is_compositor_frame_sink_lost || !can_draw_ || !visible_ || |
begin_frame_source_paused_; |
} |
@@ -284,7 +286,7 @@ bool SchedulerStateMachine::PendingActivationsShouldBeForced() const { |
// There is no output surface to trigger our activations. |
// If we do not force activations to make forward progress, we might deadlock |
// with the main thread. |
- if (output_surface_state_ == OUTPUT_SURFACE_NONE) |
+ if (compositor_frame_sink_state_ == COMPOSITOR_FRAME_SINK_NONE) |
return true; |
// If we're not visible, we should force activation. |
@@ -305,7 +307,7 @@ bool SchedulerStateMachine::PendingActivationsShouldBeForced() const { |
return false; |
} |
-bool SchedulerStateMachine::ShouldBeginOutputSurfaceCreation() const { |
+bool SchedulerStateMachine::ShouldBeginCompositorFrameSinkCreation() const { |
if (!visible_) |
return false; |
@@ -316,12 +318,12 @@ bool SchedulerStateMachine::ShouldBeginOutputSurfaceCreation() const { |
// assumes that any state passed from the client during the commit will not be |
// tied to the output surface. |
if (begin_main_frame_state_ != BEGIN_MAIN_FRAME_STATE_IDLE && |
- settings_.abort_commit_before_output_surface_creation) { |
+ settings_.abort_commit_before_compositor_frame_sink_creation) { |
return false; |
} |
- // Make sure the BeginImplFrame from any previous OutputSurfaces |
- // are complete before creating the new OutputSurface. |
+ // Make sure the BeginImplFrame from any previous CompositorFrameSinks |
+ // are complete before creating the new CompositorFrameSink. |
if (begin_impl_frame_state_ != BEGIN_IMPL_FRAME_STATE_IDLE) |
return false; |
@@ -334,7 +336,7 @@ bool SchedulerStateMachine::ShouldBeginOutputSurfaceCreation() const { |
// We need to create the output surface if we don't have one and we haven't |
// started creating one yet. |
- return output_surface_state_ == OUTPUT_SURFACE_NONE; |
+ return compositor_frame_sink_state_ == COMPOSITOR_FRAME_SINK_NONE; |
} |
bool SchedulerStateMachine::ShouldDraw() const { |
@@ -353,7 +355,7 @@ bool SchedulerStateMachine::ShouldDraw() const { |
return false; |
// Don't draw if we are waiting on the first commit after a surface. |
- if (output_surface_state_ != OUTPUT_SURFACE_ACTIVE) |
+ if (compositor_frame_sink_state_ != COMPOSITOR_FRAME_SINK_ACTIVE) |
return false; |
// Do not queue too many swaps. |
@@ -450,8 +452,8 @@ bool SchedulerStateMachine::ShouldSendBeginMainFrame() const { |
if (forced_redraw_state_ == FORCED_REDRAW_STATE_WAITING_FOR_COMMIT) |
return true; |
- // We shouldn't normally accept commits if there isn't an OutputSurface. |
- if (!HasInitializedOutputSurface()) |
+ // We shouldn't normally accept commits if there isn't an CompositorFrameSink. |
+ if (!HasInitializedCompositorFrameSink()) |
return false; |
if (!settings_.main_frame_while_swap_throttled_enabled) { |
@@ -504,9 +506,9 @@ bool SchedulerStateMachine::ShouldPrepareTiles() const { |
return needs_prepare_tiles_; |
} |
-bool SchedulerStateMachine::ShouldInvalidateOutputSurface() const { |
+bool SchedulerStateMachine::ShouldInvalidateCompositorFrameSink() const { |
// Do not invalidate too many times in a frame. |
- if (invalidate_output_surface_funnel_) |
+ if (invalidate_compositor_frame_sink_funnel_) |
return false; |
// Only the synchronous compositor requires invalidations. |
@@ -540,10 +542,10 @@ SchedulerStateMachine::Action SchedulerStateMachine::NextAction() const { |
return ACTION_PREPARE_TILES; |
if (ShouldSendBeginMainFrame()) |
return ACTION_SEND_BEGIN_MAIN_FRAME; |
- if (ShouldInvalidateOutputSurface()) |
- return ACTION_INVALIDATE_OUTPUT_SURFACE; |
- if (ShouldBeginOutputSurfaceCreation()) |
- return ACTION_BEGIN_OUTPUT_SURFACE_CREATION; |
+ if (ShouldInvalidateCompositorFrameSink()) |
+ return ACTION_INVALIDATE_COMPOSITOR_FRAME_SINK; |
+ if (ShouldBeginCompositorFrameSinkCreation()) |
+ return ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION; |
return ACTION_NONE; |
} |
@@ -586,10 +588,11 @@ void SchedulerStateMachine::WillCommit(bool commit_has_no_updates) { |
} |
// Update the output surface state. |
- if (output_surface_state_ == OUTPUT_SURFACE_WAITING_FOR_FIRST_COMMIT) { |
- output_surface_state_ = has_pending_tree_ |
- ? OUTPUT_SURFACE_WAITING_FOR_FIRST_ACTIVATION |
- : OUTPUT_SURFACE_ACTIVE; |
+ if (compositor_frame_sink_state_ == |
+ COMPOSITOR_FRAME_SINK_WAITING_FOR_FIRST_COMMIT) { |
+ compositor_frame_sink_state_ = |
+ has_pending_tree_ ? COMPOSITOR_FRAME_SINK_WAITING_FOR_FIRST_ACTIVATION |
+ : COMPOSITOR_FRAME_SINK_ACTIVE; |
} |
} |
@@ -601,8 +604,9 @@ void SchedulerStateMachine::WillActivate() { |
: BEGIN_MAIN_FRAME_STATE_IDLE; |
} |
- if (output_surface_state_ == OUTPUT_SURFACE_WAITING_FOR_FIRST_ACTIVATION) |
- output_surface_state_ = OUTPUT_SURFACE_ACTIVE; |
+ if (compositor_frame_sink_state_ == |
+ COMPOSITOR_FRAME_SINK_WAITING_FOR_FIRST_ACTIVATION) |
+ compositor_frame_sink_state_ = COMPOSITOR_FRAME_SINK_ACTIVE; |
if (forced_redraw_state_ == FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION) |
forced_redraw_state_ = FORCED_REDRAW_STATE_WAITING_FOR_DRAW; |
@@ -696,9 +700,9 @@ void SchedulerStateMachine::WillPrepareTiles() { |
needs_prepare_tiles_ = false; |
} |
-void SchedulerStateMachine::WillBeginOutputSurfaceCreation() { |
- DCHECK_EQ(output_surface_state_, OUTPUT_SURFACE_NONE); |
- output_surface_state_ = OUTPUT_SURFACE_CREATING; |
+void SchedulerStateMachine::WillBeginCompositorFrameSinkCreation() { |
+ DCHECK_EQ(compositor_frame_sink_state_, COMPOSITOR_FRAME_SINK_NONE); |
+ compositor_frame_sink_state_ = COMPOSITOR_FRAME_SINK_CREATING; |
// The following DCHECKs make sure we are in the proper quiescent state. |
// The pipeline should be flushed entirely before we start output |
@@ -706,16 +710,16 @@ void SchedulerStateMachine::WillBeginOutputSurfaceCreation() { |
// We allow output surface creation while the previous commit has not been |
// aborted if the embedder explicitly allows it. |
- DCHECK(!settings_.abort_commit_before_output_surface_creation || |
+ DCHECK(!settings_.abort_commit_before_compositor_frame_sink_creation || |
begin_main_frame_state_ == BEGIN_MAIN_FRAME_STATE_IDLE); |
DCHECK(!has_pending_tree_); |
DCHECK(!active_tree_needs_first_draw_); |
} |
-void SchedulerStateMachine::WillInvalidateOutputSurface() { |
- DCHECK(!invalidate_output_surface_funnel_); |
- invalidate_output_surface_funnel_ = true; |
- last_frame_number_invalidate_output_surface_performed_ = |
+void SchedulerStateMachine::WillInvalidateCompositorFrameSink() { |
+ DCHECK(!invalidate_compositor_frame_sink_funnel_); |
+ invalidate_compositor_frame_sink_funnel_ = true; |
+ last_frame_number_invalidate_compositor_frame_sink_performed_ = |
current_frame_number_; |
// The synchronous compositor makes no guarantees about a draw coming in after |
@@ -738,7 +742,7 @@ bool SchedulerStateMachine::BeginFrameNeededForVideo() const { |
bool SchedulerStateMachine::BeginFrameNeeded() const { |
// We can't handle BeginFrames when output surface isn't initialized. |
// TODO(brianderson): Support output surface creation inside a BeginFrame. |
- if (!HasInitializedOutputSurface()) |
+ if (!HasInitializedCompositorFrameSink()) |
return false; |
// If we are not visible, we don't need BeginFrame messages. |
@@ -827,7 +831,7 @@ void SchedulerStateMachine::OnBeginImplFrame() { |
// Clear funnels for any actions we perform during the frame. |
send_begin_main_frame_funnel_ = false; |
- invalidate_output_surface_funnel_ = false; |
+ invalidate_compositor_frame_sink_funnel_ = false; |
// "Drain" the PrepareTiles funnel. |
if (prepare_tiles_funnel_ > 0) |
@@ -974,7 +978,7 @@ void SchedulerStateMachine::DidSwapBuffers() { |
DCHECK_LT(pending_swaps_, kMaxPendingSwaps); |
pending_swaps_++; |
- swaps_with_current_output_surface_++; |
+ swaps_with_current_compositor_frame_sink_++; |
did_swap_in_last_frame_ = true; |
last_frame_number_swap_performed_ = current_frame_number_; |
@@ -1040,7 +1044,7 @@ void SchedulerStateMachine::BeginMainFrameAborted(CommitEarlyOutReason reason) { |
main_thread_missed_last_deadline_ = false; |
switch (reason) { |
- case CommitEarlyOutReason::ABORTED_OUTPUT_SURFACE_LOST: |
+ case CommitEarlyOutReason::ABORTED_COMPOSITOR_FRAME_SINK_LOST: |
case CommitEarlyOutReason::ABORTED_NOT_VISIBLE: |
case CommitEarlyOutReason::ABORTED_DEFERRED_COMMIT: |
begin_main_frame_state_ = BEGIN_MAIN_FRAME_STATE_IDLE; |
@@ -1059,11 +1063,11 @@ void SchedulerStateMachine::DidPrepareTiles() { |
prepare_tiles_funnel_++; |
} |
-void SchedulerStateMachine::DidLoseOutputSurface() { |
- if (output_surface_state_ == OUTPUT_SURFACE_NONE || |
- output_surface_state_ == OUTPUT_SURFACE_CREATING) |
+void SchedulerStateMachine::DidLoseCompositorFrameSink() { |
+ if (compositor_frame_sink_state_ == COMPOSITOR_FRAME_SINK_NONE || |
+ compositor_frame_sink_state_ == COMPOSITOR_FRAME_SINK_CREATING) |
return; |
- output_surface_state_ = OUTPUT_SURFACE_NONE; |
+ compositor_frame_sink_state_ = COMPOSITOR_FRAME_SINK_NONE; |
needs_redraw_ = false; |
wait_for_ready_to_draw_ = false; |
} |
@@ -1077,18 +1081,18 @@ void SchedulerStateMachine::NotifyReadyToDraw() { |
wait_for_ready_to_draw_ = false; |
} |
-void SchedulerStateMachine::DidCreateAndInitializeOutputSurface() { |
- DCHECK_EQ(output_surface_state_, OUTPUT_SURFACE_CREATING); |
- output_surface_state_ = OUTPUT_SURFACE_WAITING_FOR_FIRST_COMMIT; |
+void SchedulerStateMachine::DidCreateAndInitializeCompositorFrameSink() { |
+ DCHECK_EQ(compositor_frame_sink_state_, COMPOSITOR_FRAME_SINK_CREATING); |
+ compositor_frame_sink_state_ = COMPOSITOR_FRAME_SINK_WAITING_FOR_FIRST_COMMIT; |
- if (did_create_and_initialize_first_output_surface_) { |
+ if (did_create_and_initialize_first_compositor_frame_sink_) { |
// TODO(boliu): See if we can remove this when impl-side painting is always |
// on. Does anything on the main thread need to update after recreate? |
needs_begin_main_frame_ = true; |
} |
- did_create_and_initialize_first_output_surface_ = true; |
+ did_create_and_initialize_first_compositor_frame_sink_ = true; |
pending_swaps_ = 0; |
- swaps_with_current_output_surface_ = 0; |
+ swaps_with_current_compositor_frame_sink_ = 0; |
main_thread_missed_last_deadline_ = false; |
} |
@@ -1097,15 +1101,15 @@ void SchedulerStateMachine::NotifyBeginMainFrameStarted() { |
begin_main_frame_state_ = BEGIN_MAIN_FRAME_STATE_STARTED; |
} |
-bool SchedulerStateMachine::HasInitializedOutputSurface() const { |
- switch (output_surface_state_) { |
- case OUTPUT_SURFACE_NONE: |
- case OUTPUT_SURFACE_CREATING: |
+bool SchedulerStateMachine::HasInitializedCompositorFrameSink() const { |
+ switch (compositor_frame_sink_state_) { |
+ case COMPOSITOR_FRAME_SINK_NONE: |
+ case COMPOSITOR_FRAME_SINK_CREATING: |
return false; |
- case OUTPUT_SURFACE_ACTIVE: |
- case OUTPUT_SURFACE_WAITING_FOR_FIRST_COMMIT: |
- case OUTPUT_SURFACE_WAITING_FOR_FIRST_ACTIVATION: |
+ case COMPOSITOR_FRAME_SINK_ACTIVE: |
+ case COMPOSITOR_FRAME_SINK_WAITING_FOR_FIRST_COMMIT: |
+ case COMPOSITOR_FRAME_SINK_WAITING_FOR_FIRST_ACTIVATION: |
return true; |
} |
NOTREACHED(); |