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 f862bafa006af32f9df9b5e6781d0ec8c30d0c62..447cf578fe53e4c9121bd05f168445a681404b55 100644 |
| --- a/cc/scheduler/scheduler_state_machine_unittest.cc |
| +++ b/cc/scheduler/scheduler_state_machine_unittest.cc |
| @@ -1723,7 +1723,7 @@ TEST(SchedulerStateMachineTest, TestTriggerDeadlineEarlyAfterAbortedCommit) { |
| EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); |
| } |
| -TEST(SchedulerStateMachineTest, TestTriggerDeadlineEarlyForSmoothness) { |
| +TEST(SchedulerStateMachineTest, TestSmoothnessTakesPriority) { |
| SchedulerSettings settings; |
| settings.impl_side_painting = true; |
| StateMachine state(settings); |
| @@ -1735,18 +1735,90 @@ TEST(SchedulerStateMachineTest, TestTriggerDeadlineEarlyForSmoothness) { |
| // This test ensures that impl-draws are prioritized over main thread updates |
| // in prefer smoothness mode. |
| - state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
| state.SetNeedsRedraw(true); |
| state.SetNeedsCommit(); |
| + state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| EXPECT_ACTION_UPDATE_STATE( |
| SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| - // The deadline is not triggered early until we enter prefer smoothness mode. |
| + // Verify the deadline is not triggered early until we enter |
| + // prefer smoothness mode. |
| EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); |
| state.SetSmoothnessTakesPriority(true); |
| EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); |
| + |
| + // Trigger the deadline. |
| + state.OnBeginImplFrameDeadline(); |
| + EXPECT_ACTION_UPDATE_STATE( |
| + SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| + state.DidSwapBuffers(); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| + state.DidSwapBuffersComplete(); |
| + |
| + // Finish the previous commit and initiate another one. |
| + state.SetNeedsCommit(); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| + state.NotifyBeginMainFrameStarted(); |
| + state.NotifyReadyToCommit(); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| + state.NotifyReadyToActivate(); |
| + EXPECT_ACTION_UPDATE_STATE( |
| + SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| + |
| + // Trigger another BeginFrame. |
| + // Since we are in prefer smoothness mode, we do not start the next |
| + // BeginMainFrame until after we draw. |
| + state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| + |
| + // Trigger the deadline and verify we send the BeginMainFrame after we |
| + // draw, even if we are swap throttled. |
| + EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); |
| + state.OnBeginImplFrameDeadline(); |
| + EXPECT_ACTION_UPDATE_STATE( |
| + SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| + state.DidSwapBuffers(); |
| + EXPECT_ACTION_UPDATE_STATE( |
| + SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
|
brianderson
2014/06/11 23:25:49
This point in the test verifies the logic still se
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| + state.DidSwapBuffersComplete(); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| + |
| + // Finish the previous commit and draw it. |
|
Sami
2014/06/13 10:39:12
nit: Maybe consider lifting some of this into a ut
brianderson
2014/06/13 18:19:30
Done.
|
| + state.NotifyBeginMainFrameStarted(); |
| + state.NotifyReadyToCommit(); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| + state.NotifyReadyToActivate(); |
| + EXPECT_ACTION_UPDATE_STATE( |
| + SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| + |
| + state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| + |
| + EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); |
| + state.OnBeginImplFrameDeadline(); |
| + EXPECT_ACTION_UPDATE_STATE( |
| + SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| + state.DidSwapBuffers(); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| + |
| + // Verify we do not send another BeginMainFrame in the deadline if we |
|
Sami
2014/06/13 10:39:12
nit: "if we are swap throttled and did not just sw
brianderson
2014/06/13 18:19:30
Done.
|
| + // did not just swap. |
| + state.SetNeedsCommit(); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| + state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| + EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); |
| + state.OnBeginImplFrameDeadline(); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
|
brianderson
2014/06/11 23:25:49
This point in the test verifies that we don't send
|
| } |
| TEST(SchedulerStateMachineTest, TestTriggerDeadlineEarlyOnLostOutputSurface) { |