Chromium Code Reviews| Index: cc/scheduler/scheduler_state_machine_unittest.cc |
| diff --git a/cc/scheduler/scheduler_state_machine_unittest.cc b/cc/scheduler/scheduler_state_machine_unittest.cc |
| index f31dabb85954a223c9e176ea00699f896626b140..8f27f0781eeffba098be82a1dbde7f4efea3f154 100644 |
| --- a/cc/scheduler/scheduler_state_machine_unittest.cc |
| +++ b/cc/scheduler/scheduler_state_machine_unittest.cc |
| @@ -232,6 +232,7 @@ TEST(SchedulerStateMachineTest, MainFrameBeforeDrawDisabled) { |
| EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); |
| state.OnBeginImplFrameDeadline(); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| EXPECT_ACTION_UPDATE_STATE( |
| SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| EXPECT_EQ(state.CommitState(), SchedulerStateMachine::COMMIT_STATE_IDLE); |
| @@ -303,6 +304,7 @@ TEST(SchedulerStateMachineTest, MainFrameBeforeActivationEnabled) { |
| EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); |
| state.OnBeginImplFrameDeadline(); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| EXPECT_ACTION_UPDATE_STATE( |
| SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| @@ -323,6 +325,7 @@ TEST(SchedulerStateMachineTest, |
| EXPECT_TRUE(state.RedrawPending()); |
| EXPECT_TRUE(state.BeginImplFrameNeeded()); |
| state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| state.OnBeginImplFrameDeadline(); |
| @@ -338,6 +341,7 @@ TEST(SchedulerStateMachineTest, |
| state.DidDrawIfPossibleCompleted( |
| DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| EXPECT_ACTION_UPDATE_STATE( |
| SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| EXPECT_TRUE(state.RedrawPending()); |
| @@ -357,6 +361,7 @@ TEST(SchedulerStateMachineTest, TestFailedDrawForMissingHighResNeedsCommit) { |
| EXPECT_TRUE(state.BeginImplFrameNeeded()); |
| state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| state.OnBeginImplFrameDeadline(); |
| EXPECT_ACTION_UPDATE_STATE( |
| @@ -389,6 +394,7 @@ TEST(SchedulerStateMachineTest, |
| EXPECT_TRUE(state.RedrawPending()); |
| EXPECT_TRUE(state.BeginImplFrameNeeded()); |
| state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| state.OnBeginImplFrameDeadline(); |
| @@ -408,6 +414,7 @@ TEST(SchedulerStateMachineTest, |
| state.DidDrawIfPossibleCompleted( |
| DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| EXPECT_ACTION_UPDATE_STATE( |
| SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| EXPECT_TRUE(state.RedrawPending()); |
| @@ -438,6 +445,7 @@ void TestFailedDrawsEventuallyForceDrawAfterNextCommit( |
| // Then initiate a draw. |
| state.SetNeedsRedraw(true); |
| state.OnBeginImplFrameDeadline(); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| EXPECT_ACTION_UPDATE_STATE( |
| SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| @@ -460,6 +468,7 @@ void TestFailedDrawsEventuallyForceDrawAfterNextCommit( |
| // The redraw should be forced at the end of the next BeginImplFrame. |
| state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| if (main_frame_before_draw_enabled) { |
| EXPECT_ACTION_UPDATE_STATE( |
| SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| @@ -509,6 +518,7 @@ TEST(SchedulerStateMachineTest, TestFailedDrawsDoNotRestartForcedDraw) { |
| // Then initiate a draw. |
| state.SetNeedsRedraw(true); |
| state.OnBeginImplFrameDeadline(); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| EXPECT_ACTION_UPDATE_STATE( |
| SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| @@ -561,6 +571,7 @@ TEST(SchedulerStateMachineTest, TestFailedDrawIsRetriedInNextBeginImplFrame) { |
| state.SetNeedsRedraw(true); |
| EXPECT_TRUE(state.BeginImplFrameNeeded()); |
| state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| state.OnBeginImplFrameDeadline(); |
| EXPECT_TRUE(state.RedrawPending()); |
| @@ -578,6 +589,7 @@ TEST(SchedulerStateMachineTest, TestFailedDrawIsRetriedInNextBeginImplFrame) { |
| // We should not be trying to draw again now, but we have a commit pending. |
| EXPECT_TRUE(state.BeginImplFrameNeeded()); |
| state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| // We should try to draw again at the end of the next BeginImplFrame on |
| @@ -601,6 +613,7 @@ TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) { |
| // Draw the first frame. |
| EXPECT_TRUE(state.BeginImplFrameNeeded()); |
| state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| state.OnBeginImplFrameDeadline(); |
| @@ -618,6 +631,7 @@ TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) { |
| EXPECT_TRUE(state.BeginImplFrameNeeded()); |
| state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| state.OnBeginImplFrameDeadline(); |
| @@ -681,6 +695,7 @@ TEST(SchedulerStateMachineTest, TestNextActionDrawsOnBeginImplFrame) { |
| state.SetCommitState(all_commit_states[i]); |
| state.SetBeginImplFrameState( |
| SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); |
| + |
| if (request_readback) { |
| state.SetNeedsForcedRedrawForReadback(); |
| } else { |
| @@ -697,6 +712,9 @@ TEST(SchedulerStateMachineTest, TestNextActionDrawsOnBeginImplFrame) { |
| } else { |
| expected_action = |
| SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE; |
| + EXPECT_EQ(state.NextAction(), SchedulerStateMachine::ACTION_ANIMATE) |
| + << *state.AsValue(); |
| + state.UpdateState(state.NextAction()); |
| } |
| // Case 1: needs_commit=false. |
| @@ -856,6 +874,7 @@ void TestSetNeedsCommitIsNotLost(bool main_frame_before_draw_enabled) { |
| // Finish the commit, then make sure we start the next commit immediately |
| // and draw on the next BeginImplFrame. |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| if (main_frame_before_draw_enabled) { |
| EXPECT_ACTION_UPDATE_STATE( |
| SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| @@ -922,6 +941,7 @@ TEST(SchedulerStateMachineTest, TestFullCycle) { |
| // At BeginImplFrame deadline, draw. |
| state.OnBeginImplFrameDeadline(); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| EXPECT_ACTION_UPDATE_STATE( |
| SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); |
| @@ -973,6 +993,7 @@ TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) { |
| // At BeginImplFrame deadline, draw. |
| state.OnBeginImplFrameDeadline(); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| EXPECT_ACTION_UPDATE_STATE( |
| SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); |
| @@ -1081,6 +1102,7 @@ TEST(SchedulerStateMachineTest, AbortBeginMainFrameAndCancelCommit) { |
| // Start a new frame; draw because this is the first frame since output |
| // surface init'd. |
| state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| state.OnBeginImplFrameDeadline(); |
| EXPECT_ACTION_UPDATE_STATE( |
| @@ -1206,6 +1228,7 @@ TEST(SchedulerStateMachineTest, |
| // Once the context is recreated, whether we draw should be based on |
| // SetCanDraw. |
| state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| state.OnBeginImplFrameDeadline(); |
| EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE, |
| @@ -1233,6 +1256,7 @@ TEST(SchedulerStateMachineTest, TestContextLostWhileCommitInProgress) { |
| // Set damage and expect a draw. |
| state.SetNeedsRedraw(true); |
| state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| EXPECT_ACTION_UPDATE_STATE( |
| SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| @@ -1297,6 +1321,7 @@ TEST(SchedulerStateMachineTest, |
| // Set damage and expect a draw. |
| state.SetNeedsRedraw(true); |
| state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| EXPECT_ACTION_UPDATE_STATE( |
| SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| @@ -1358,6 +1383,7 @@ TEST(SchedulerStateMachineTest, |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| state.OnBeginImplFrameDeadline(); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| EXPECT_ACTION_UPDATE_STATE( |
| SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| @@ -1521,6 +1547,7 @@ TEST(SchedulerStateMachineTest, DontMakeNewCommitAfterDrawingReplaceCommit) { |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| state.OnBeginImplFrameDeadline(); |
| EXPECT_ACTION_UPDATE_STATE( |
| @@ -1867,6 +1894,7 @@ TEST(SchedulerStateMachineTest, TestTriggerDeadlineEarlyAfterAbortedCommit) { |
| state.SetNeedsCommit(); |
| // We should start the commit normally. |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| EXPECT_ACTION_UPDATE_STATE( |
| SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| @@ -1895,6 +1923,7 @@ TEST(SchedulerStateMachineTest, TestTriggerDeadlineEarlyForSmoothness) { |
| state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| state.SetNeedsRedraw(true); |
| state.SetNeedsCommit(); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| EXPECT_ACTION_UPDATE_STATE( |
| SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| @@ -1905,5 +1934,54 @@ TEST(SchedulerStateMachineTest, TestTriggerDeadlineEarlyForSmoothness) { |
| EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); |
| } |
| +TEST(SchedulerStateMachineTest, TestSetNeedsAnimate) { |
| + SchedulerSettings settings; |
| + settings.impl_side_painting = true; |
| + StateMachine state(settings); |
| + state.SetCanStart(); |
| + state.UpdateState(state.NextAction()); |
| + state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| + state.SetVisible(true); |
| + state.SetCanDraw(true); |
| + |
| + // Test requesting an animation that, when run, causes us to draw. |
| + state.SetNeedsAnimate(); |
| + EXPECT_TRUE(state.BeginImplFrameNeeded()); |
| + |
| + state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| + |
| + state.OnBeginImplFrameDeadlinePending(); |
| + state.OnBeginImplFrameDeadline(); |
| + EXPECT_ACTION_UPDATE_STATE( |
| + SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| +} |
| + |
| +TEST(SchedulerStateMachineTest, TestAnimateBeforeCommit) { |
| + SchedulerSettings settings; |
| + settings.impl_side_painting = true; |
| + StateMachine state(settings); |
| + state.SetCanStart(); |
| + state.UpdateState(state.NextAction()); |
| + state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| + state.SetVisible(true); |
| + state.SetCanDraw(true); |
| + |
| + // Check that animations are updated before we start a commit. |
| + state.SetNeedsAnimate(); |
|
brianderson
2014/04/01 16:05:11
Can you add a test that verifies what happens when
Sami
2014/04/17 15:16:33
Good idea, done.
|
| + state.SetNeedsCommit(); |
| + EXPECT_TRUE(state.BeginImplFrameNeeded()); |
| + |
| + state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
|
brianderson
2014/04/01 16:05:11
Can you verify that no actions are triggered befor
Sami
2014/04/17 15:16:33
Done.
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| + EXPECT_ACTION_UPDATE_STATE( |
| + SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| + |
| + state.OnBeginImplFrameDeadlinePending(); |
| + state.OnBeginImplFrameDeadline(); |
| + EXPECT_ACTION_UPDATE_STATE( |
| + SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| +} |
| + |
| } // namespace |
| } // namespace cc |