| Index: cc/scheduler_state_machine_unittest.cc
|
| diff --git a/cc/scheduler_state_machine_unittest.cc b/cc/scheduler_state_machine_unittest.cc
|
| index c482bc7adb2703a2f028472811e5bbdbf09324cf..df6a3df4efff62f07bf8030b6ac7486559382369 100644
|
| --- a/cc/scheduler_state_machine_unittest.cc
|
| +++ b/cc/scheduler_state_machine_unittest.cc
|
| @@ -22,12 +22,8 @@ public:
|
| void setCommitState(CommitState cs) { m_commitState = cs; }
|
| CommitState commitState() const { return m_commitState; }
|
|
|
| - void setNeedsCommit(bool b) { m_needsCommit = b; }
|
| bool needsCommit() const { return m_needsCommit; }
|
|
|
| - void setNeedsForcedCommit(bool b) { m_needsForcedCommit = b; }
|
| - bool needsForcedCommit() const { return m_needsForcedCommit; }
|
| -
|
| void setNeedsRedraw(bool b) { m_needsRedraw = b; }
|
| bool needsRedraw() const { return m_needsRedraw; }
|
|
|
| @@ -47,7 +43,6 @@ TEST(SchedulerStateMachineTest, TestNextActionBeginsFrameIfNeeded)
|
| state.setCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE);
|
| state.setCanBeginFrame(true);
|
| state.setNeedsRedraw(false);
|
| - state.setNeedsCommit(false);
|
| state.setVisible(true);
|
|
|
| EXPECT_FALSE(state.vsyncCallbackNeeded());
|
| @@ -64,7 +59,6 @@ TEST(SchedulerStateMachineTest, TestNextActionBeginsFrameIfNeeded)
|
| StateMachine state;
|
| state.setCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE);
|
| state.setNeedsRedraw(false);
|
| - state.setNeedsCommit(false);
|
| state.setVisible(true);
|
|
|
| EXPECT_FALSE(state.vsyncCallbackNeeded());
|
| @@ -83,7 +77,6 @@ TEST(SchedulerStateMachineTest, TestNextActionBeginsFrameIfNeeded)
|
| state.setCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE);
|
| state.setCanBeginFrame(true);
|
| state.setNeedsRedraw(false);
|
| - state.setNeedsCommit(true);
|
| state.setVisible(true);
|
| EXPECT_FALSE(state.vsyncCallbackNeeded());
|
| }
|
| @@ -366,11 +359,10 @@ TEST(SchedulerStateMachineTest, TestNextActionDrawsOnVSync)
|
| state.setVisible(true);
|
|
|
| // Case 1: needsCommit=false
|
| - state.setNeedsCommit(false);
|
| EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction());
|
|
|
| // Case 2: needsCommit=true
|
| - state.setNeedsCommit(true);
|
| + state.setNeedsCommit();
|
| EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction());
|
| }
|
| }
|
| @@ -396,12 +388,11 @@ TEST(SchedulerStateMachineTest, TestNextActionDrawsOnVSync)
|
| expectedAction = SchedulerStateMachine::ACTION_COMMIT;
|
|
|
| // Case 1: needsCommit=false.
|
| - state.setNeedsCommit(false);
|
| EXPECT_TRUE(state.vsyncCallbackNeeded());
|
| EXPECT_EQ(expectedAction, state.nextAction());
|
|
|
| // Case 2: needsCommit=true.
|
| - state.setNeedsCommit(true);
|
| + state.setNeedsCommit();
|
| EXPECT_TRUE(state.vsyncCallbackNeeded());
|
| EXPECT_EQ(expectedAction, state.nextAction());
|
| }
|
| @@ -423,11 +414,10 @@ TEST(SchedulerStateMachineTest, TestNoCommitStatesRedrawWhenInvisible)
|
| state.didEnterVSync();
|
|
|
| // Case 1: needsCommit=false.
|
| - state.setNeedsCommit(false);
|
| EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction());
|
|
|
| // Case 2: needsCommit=true.
|
| - state.setNeedsCommit(true);
|
| + state.setNeedsCommit();
|
| EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction());
|
| }
|
| }
|
| @@ -458,7 +448,7 @@ TEST(SchedulerStateMachineTest, TestCanRedrawWithWaitingForFirstDrawMakesProgres
|
| StateMachine state;
|
| state.setCommitState(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW);
|
| state.setCanBeginFrame(true);
|
| - state.setNeedsCommit(true);
|
| + state.setNeedsCommit();
|
| state.setNeedsRedraw(true);
|
| state.setVisible(true);
|
| state.setCanDraw(false);
|
| @@ -469,7 +459,7 @@ TEST(SchedulerStateMachineTest, TestSetNeedsCommitIsNotLost)
|
| {
|
| StateMachine state;
|
| state.setCanBeginFrame(true);
|
| - state.setNeedsCommit(true);
|
| + state.setNeedsCommit();
|
| state.setVisible(true);
|
| state.setCanDraw(true);
|
|
|
| @@ -479,7 +469,7 @@ TEST(SchedulerStateMachineTest, TestSetNeedsCommitIsNotLost)
|
| EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, state.commitState());
|
|
|
| // Now, while the frame is in progress, set another commit.
|
| - state.setNeedsCommit(true);
|
| + state.setNeedsCommit();
|
| EXPECT_TRUE(state.needsCommit());
|
|
|
| // Let the frame finish.
|
| @@ -512,7 +502,7 @@ TEST(SchedulerStateMachineTest, TestFullCycle)
|
| state.setCanDraw(true);
|
|
|
| // Start clean and set commit.
|
| - state.setNeedsCommit(true);
|
| + state.setNeedsCommit();
|
| EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction());
|
|
|
| // Begin the frame.
|
| @@ -555,7 +545,7 @@ TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween)
|
| state.setCanDraw(true);
|
|
|
| // Start clean and set commit.
|
| - state.setNeedsCommit(true);
|
| + state.setNeedsCommit();
|
| EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction());
|
|
|
| // Begin the frame.
|
| @@ -565,7 +555,7 @@ TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween)
|
| EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.nextAction());
|
|
|
| // Request another commit while the commit is in flight.
|
| - state.setNeedsCommit(true);
|
| + state.setNeedsCommit();
|
| EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.nextAction());
|
|
|
| // Tell the scheduler the frame finished.
|
| @@ -597,7 +587,7 @@ TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween)
|
| TEST(SchedulerStateMachineTest, TestRequestCommitInvisible)
|
| {
|
| StateMachine state;
|
| - state.setNeedsCommit(true);
|
| + state.setNeedsCommit();
|
| EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.nextAction());
|
| }
|
|
|
| @@ -609,7 +599,7 @@ TEST(SchedulerStateMachineTest, TestGoesInvisibleBeforeBeginFrameCompletes)
|
| state.setCanDraw(true);
|
|
|
| // Start clean and set commit.
|
| - state.setNeedsCommit(true);
|
| + state.setNeedsCommit();
|
| EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction());
|
|
|
| // Begin the frame while visible.
|
| @@ -679,7 +669,7 @@ TEST(SchedulerStateMachineTest, TestContextLostWhenIdleAndCommitRequestedWhileRe
|
| EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.nextAction());
|
|
|
| // While context is recreating, commits shouldn't begin.
|
| - state.setNeedsCommit(true);
|
| + state.setNeedsCommit();
|
| EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.nextAction());
|
|
|
| // Recreate the context
|
| @@ -708,7 +698,7 @@ TEST(SchedulerStateMachineTest, TestContextLostWhileCommitInProgress)
|
| state.setCanDraw(true);
|
|
|
| // Get a commit in flight.
|
| - state.setNeedsCommit(true);
|
| + state.setNeedsCommit();
|
| EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction());
|
| state.updateState(state.nextAction());
|
|
|
| @@ -751,7 +741,7 @@ TEST(SchedulerStateMachineTest, TestContextLostWhileCommitInProgressAndAnotherCo
|
| state.setCanDraw(true);
|
|
|
| // Get a commit in flight.
|
| - state.setNeedsCommit(true);
|
| + state.setNeedsCommit();
|
| EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction());
|
| state.updateState(state.nextAction());
|
|
|
| @@ -767,7 +757,7 @@ TEST(SchedulerStateMachineTest, TestContextLostWhileCommitInProgressAndAnotherCo
|
|
|
| // Ask for another draw and also set needs commit. Expect nothing happens.
|
| state.setNeedsRedraw(true);
|
| - state.setNeedsCommit(true);
|
| + state.setNeedsCommit();
|
| EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.nextAction());
|
|
|
| // Finish the frame, and commit.
|
| @@ -822,8 +812,8 @@ TEST(SchedulerStateMachineTest, TestBeginFrameWhenInvisibleAndForceCommit)
|
| StateMachine state;
|
| state.setCanBeginFrame(true);
|
| state.setVisible(false);
|
| - state.setNeedsCommit(true);
|
| - state.setNeedsForcedCommit(true);
|
| + state.setNeedsCommit();
|
| + state.setNeedsForcedCommit();
|
| EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction());
|
| }
|
|
|
| @@ -832,8 +822,8 @@ TEST(SchedulerStateMachineTest, TestBeginFrameWhenCanBeginFrameFalseAndForceComm
|
| StateMachine state;
|
| state.setVisible(true);
|
| state.setCanDraw(true);
|
| - state.setNeedsCommit(true);
|
| - state.setNeedsForcedCommit(true);
|
| + state.setNeedsCommit();
|
| + state.setNeedsForcedCommit();
|
| EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction());
|
| }
|
|
|
| @@ -843,8 +833,8 @@ TEST(SchedulerStateMachineTest, TestBeginFrameWhenCommitInProgress)
|
| state.setCanBeginFrame(true);
|
| state.setVisible(false);
|
| state.setCommitState(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS);
|
| - state.setNeedsCommit(true);
|
| - state.setNeedsForcedCommit(true);
|
| + state.setNeedsCommit();
|
| + state.setNeedsForcedCommit();
|
|
|
| state.beginFrameComplete();
|
| EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.nextAction());
|
| @@ -861,11 +851,105 @@ TEST(SchedulerStateMachineTest, TestBeginFrameWhenContextLost)
|
| state.setCanBeginFrame(true);
|
| state.setVisible(true);
|
| state.setCanDraw(true);
|
| - state.setNeedsCommit(true);
|
| - state.setNeedsForcedCommit(true);
|
| + state.setNeedsCommit();
|
| + state.setNeedsForcedCommit();
|
| state.didLoseContext();
|
| EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction());
|
| }
|
|
|
| +TEST(SchedulerStateMachineTest, TestImmediateBeginFrame)
|
| +{
|
| + StateMachine state;
|
| + state.setCanBeginFrame(true);
|
| + state.setVisible(true);
|
| + state.setCanDraw(true);
|
| +
|
| + // Schedule a forced frame, commit it, draw it.
|
| + state.setNeedsCommit();
|
| + state.setNeedsForcedCommit();
|
| + state.updateState(state.nextAction());
|
| + state.beginFrameComplete();
|
| + EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.nextAction());
|
| + EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, state.commitState());
|
| + state.updateState(state.nextAction());
|
| +
|
| + state.didEnterVSync();
|
| + EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction());
|
| + state.updateState(state.nextAction());
|
| + state.didDrawIfPossibleCompleted(true);
|
| + state.didLeaveVSync();
|
| +
|
| + // Should be waiting for the normal begin frame
|
| + EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, state.commitState());
|
| +}
|
| +
|
| +TEST(SchedulerStateMachineTest, TestImmediateBeginFrameDuringCommit)
|
| +{
|
| + StateMachine state;
|
| + state.setCanBeginFrame(true);
|
| + state.setVisible(true);
|
| + state.setCanDraw(true);
|
| +
|
| + // Start a normal commit.
|
| + state.setNeedsCommit();
|
| + state.updateState(state.nextAction());
|
| +
|
| + // Schedule a forced frame, commit it, draw it.
|
| + state.setNeedsCommit();
|
| + state.setNeedsForcedCommit();
|
| + state.updateState(state.nextAction());
|
| + state.beginFrameComplete();
|
| + EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.nextAction());
|
| + EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, state.commitState());
|
| + state.updateState(state.nextAction());
|
| +
|
| + state.didEnterVSync();
|
| + EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction());
|
| + state.updateState(state.nextAction());
|
| + state.didDrawIfPossibleCompleted(true);
|
| + state.didLeaveVSync();
|
| +
|
| + // Should be waiting for the normal begin frame
|
| + EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, state.commitState()) << state.toString();
|
| +}
|
| +
|
| +TEST(SchedulerStateMachineTest, ImmediateBeginFrameWhileInvisible)
|
| +{
|
| + StateMachine state;
|
| + state.setCanBeginFrame(true);
|
| + state.setVisible(true);
|
| + state.setCanDraw(true);
|
| +
|
| + state.setNeedsCommit();
|
| + state.updateState(state.nextAction());
|
| +
|
| + state.setNeedsCommit();
|
| + state.setNeedsForcedCommit();
|
| + state.updateState(state.nextAction());
|
| + state.beginFrameComplete();
|
| +
|
| + EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.nextAction());
|
| + EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, state.commitState());
|
| + state.updateState(state.nextAction());
|
| +
|
| + state.didEnterVSync();
|
| + EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction());
|
| + state.updateState(state.nextAction());
|
| + state.didDrawIfPossibleCompleted(true);
|
| + state.didLeaveVSync();
|
| +
|
| + // Should be waiting for the normal begin frame
|
| + EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, state.commitState()) << state.toString();
|
| +
|
| +
|
| + // Become invisible and abort the "normal" begin frame.
|
| + state.setVisible(false);
|
| + state.beginFrameAborted();
|
| +
|
| + // Should be back in the idle state, but needing a commit.
|
| + EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.commitState());
|
| + EXPECT_TRUE(state.needsCommit());
|
| +}
|
| +
|
| } // namespace
|
| } // namespace cc
|
|
|