| 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 060269d11e63d1cab9ac13b5c9fceb4c980e08e4..3dfe9341b79851e8a72aeeabab95373083dfad15 100644
|
| --- a/cc/scheduler/scheduler_state_machine_unittest.cc
|
| +++ b/cc/scheduler/scheduler_state_machine_unittest.cc
|
| @@ -237,6 +237,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);
|
| @@ -308,6 +309,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);
|
| @@ -328,6 +330,7 @@ TEST(SchedulerStateMachineTest,
|
| EXPECT_TRUE(state.RedrawPending());
|
| EXPECT_TRUE(state.BeginFrameNeeded());
|
| state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
|
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
| state.OnBeginImplFrameDeadline();
|
|
|
| @@ -343,6 +346,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());
|
| @@ -362,6 +366,7 @@ TEST(SchedulerStateMachineTest, TestFailedDrawForMissingHighResNeedsCommit) {
|
| EXPECT_TRUE(state.BeginFrameNeeded());
|
|
|
| state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
|
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
| state.OnBeginImplFrameDeadline();
|
| EXPECT_ACTION_UPDATE_STATE(
|
| @@ -394,6 +399,7 @@ TEST(SchedulerStateMachineTest,
|
| EXPECT_TRUE(state.RedrawPending());
|
| EXPECT_TRUE(state.BeginFrameNeeded());
|
| state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
|
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
| state.OnBeginImplFrameDeadline();
|
|
|
| @@ -413,6 +419,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());
|
| @@ -443,6 +450,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);
|
|
|
| @@ -465,6 +473,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);
|
| @@ -514,6 +523,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);
|
|
|
| @@ -566,6 +576,7 @@ TEST(SchedulerStateMachineTest, TestFailedDrawIsRetriedInNextBeginImplFrame) {
|
| state.SetNeedsRedraw(true);
|
| EXPECT_TRUE(state.BeginFrameNeeded());
|
| state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
|
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
| state.OnBeginImplFrameDeadline();
|
| EXPECT_TRUE(state.RedrawPending());
|
| @@ -583,6 +594,7 @@ TEST(SchedulerStateMachineTest, TestFailedDrawIsRetriedInNextBeginImplFrame) {
|
| // We should not be trying to draw again now, but we have a commit pending.
|
| EXPECT_TRUE(state.BeginFrameNeeded());
|
| 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
|
| @@ -606,6 +618,7 @@ TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) {
|
| // Draw the first frame.
|
| EXPECT_TRUE(state.BeginFrameNeeded());
|
| state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
|
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
|
|
| state.OnBeginImplFrameDeadline();
|
| @@ -623,6 +636,7 @@ TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) {
|
| EXPECT_TRUE(state.BeginFrameNeeded());
|
| state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
|
|
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
|
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
|
|
| state.OnBeginImplFrameDeadline();
|
| @@ -686,6 +700,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 {
|
| @@ -702,6 +717,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.
|
| @@ -859,6 +877,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);
|
| @@ -925,6 +944,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);
|
| @@ -976,6 +996,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);
|
| @@ -1084,6 +1105,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(
|
| @@ -1209,6 +1231,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,
|
| @@ -1236,6 +1259,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);
|
| @@ -1300,6 +1324,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);
|
| @@ -1361,6 +1386,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);
|
| @@ -1524,6 +1550,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(
|
| @@ -1628,6 +1655,7 @@ void TestForceCommitWhenReplacementActivationInProgress(
|
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
|
|
| state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
|
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
| // Perform the draw & swap of replacement commit.
|
| state.OnBeginImplFrameDeadline();
|
| @@ -1667,6 +1695,7 @@ void TestForceCommitWhenReplacementActivationInProgress(
|
| EXPECT_ACTION_UPDATE_STATE(
|
| SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE);
|
| state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
|
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
| state.OnBeginImplFrameDeadline();
|
| EXPECT_ACTION_UPDATE_STATE(
|
| @@ -1737,6 +1766,7 @@ TEST(SchedulerStateMachineTest,
|
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
|
|
| state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
|
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
| // Perform the draw & swap of replacement commit.
|
| state.OnBeginImplFrameDeadline();
|
| @@ -1974,6 +2004,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);
|
| @@ -2002,6 +2033,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);
|
| @@ -2012,5 +2044,84 @@ 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.BeginFrameNeeded());
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
| +
|
| + 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();
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
| + state.SetNeedsCommit();
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
| + EXPECT_TRUE(state.BeginFrameNeeded());
|
| +
|
| + state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
|
| + 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);
|
| +}
|
| +
|
| +TEST(SchedulerStateMachineTest, TestSetNeedsAnimateAfterAnimate) {
|
| + 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 after we have already animated during this
|
| + // frame.
|
| + state.SetNeedsRedraw(true);
|
| + EXPECT_TRUE(state.BeginFrameNeeded());
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
| +
|
| + state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
|
| +
|
| + state.SetNeedsAnimate();
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
| +
|
| + state.OnBeginImplFrameDeadline();
|
| + EXPECT_ACTION_UPDATE_STATE(
|
| + SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
|
| +}
|
| +
|
| } // namespace
|
| } // namespace cc
|
|
|