Index: cc/scheduler_state_machine.cc |
diff --git a/cc/scheduler_state_machine.cc b/cc/scheduler_state_machine.cc |
index e840447695fb7342717fd7349c70945c4f0eccef..143efb3a84c72dbd0576a97e9628f064fea1ac8c 100644 |
--- a/cc/scheduler_state_machine.cc |
+++ b/cc/scheduler_state_machine.cc |
@@ -142,7 +142,7 @@ SchedulerStateMachine::Action SchedulerStateMachine::nextAction() const |
case COMMIT_STATE_READY_TO_COMMIT: |
return ACTION_COMMIT; |
- case COMMIT_STATE_WAITING_FOR_FIRST_DRAW: |
+ case COMMIT_STATE_WAITING_FOR_FIRST_DRAW: { |
if (shouldDraw() || m_outputSurfaceState == OUTPUT_SURFACE_LOST) |
return m_needsForcedRedraw ? ACTION_DRAW_FORCED : ACTION_DRAW_IF_POSSIBLE; |
// COMMIT_STATE_WAITING_FOR_FIRST_DRAW wants to enforce a draw. If m_canDraw is false |
@@ -152,6 +152,12 @@ SchedulerStateMachine::Action SchedulerStateMachine::nextAction() const |
return ACTION_BEGIN_FRAME; |
return ACTION_NONE; |
} |
+ |
+ case COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW: |
+ if (m_needsForcedRedraw) |
+ return ACTION_DRAW_FORCED; |
+ return ACTION_NONE; |
+ } |
NOTREACHED(); |
return ACTION_NONE; |
} |
@@ -170,7 +176,10 @@ void SchedulerStateMachine::updateState(Action action) |
return; |
case ACTION_COMMIT: |
- m_commitState = COMMIT_STATE_WAITING_FOR_FIRST_DRAW; |
+ if (m_expectImmediateBeginFrame) |
+ m_commitState = COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW; |
+ else |
+ m_commitState = COMMIT_STATE_WAITING_FOR_FIRST_DRAW; |
m_needsRedraw = true; |
if (m_drawIfPossibleFailed) |
m_lastFrameNumberWhereDrawWasCalled = -1; |
@@ -190,13 +199,12 @@ void SchedulerStateMachine::updateState(Action action) |
m_drawIfPossibleFailed = false; |
if (m_insideVSync) |
m_lastFrameNumberWhereDrawWasCalled = m_currentFrameNumber; |
- if (m_commitState == COMMIT_STATE_WAITING_FOR_FIRST_DRAW) { |
- if (m_expectImmediateBeginFrame) { |
- m_commitState = COMMIT_STATE_FRAME_IN_PROGRESS; |
- m_expectImmediateBeginFrame = false; |
- } else |
- m_commitState = COMMIT_STATE_IDLE; |
- } |
+ if (m_commitState == COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW) { |
+ DCHECK(m_expectImmediateBeginFrame); |
+ m_commitState = COMMIT_STATE_FRAME_IN_PROGRESS; |
+ m_expectImmediateBeginFrame = false; |
+ } else if (m_commitState == COMMIT_STATE_WAITING_FOR_FIRST_DRAW) |
+ m_commitState = COMMIT_STATE_IDLE; |
if (m_textureState == LAYER_TEXTURE_STATE_ACQUIRED_BY_IMPL_THREAD) |
m_textureState = LAYER_TEXTURE_STATE_UNLOCKED; |
return; |