| 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..b5834241d8cb50338b28818a221ab4568937964f 100644
|
| --- a/cc/scheduler/scheduler_state_machine_unittest.cc
|
| +++ b/cc/scheduler/scheduler_state_machine_unittest.cc
|
| @@ -1723,7 +1723,32 @@ TEST(SchedulerStateMachineTest, TestTriggerDeadlineEarlyAfterAbortedCommit) {
|
| EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly());
|
| }
|
|
|
| -TEST(SchedulerStateMachineTest, TestTriggerDeadlineEarlyForSmoothness) {
|
| +void FinishPreviousCommitAndDrawWithoutExitingDeadline(
|
| + StateMachine* state_ptr) {
|
| + // Gross, but allows us to use macros below.
|
| + StateMachine& state = *state_ptr;
|
| +
|
| + 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();
|
| +}
|
| +
|
| +TEST(SchedulerStateMachineTest, TestSmoothnessTakesPriority) {
|
| SchedulerSettings settings;
|
| settings.impl_side_painting = true;
|
| StateMachine state(settings);
|
| @@ -1735,18 +1760,50 @@ 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();
|
| +
|
| + // Request a new commit and finish the previous one.
|
| + state.SetNeedsCommit();
|
| + FinishPreviousCommitAndDrawWithoutExitingDeadline(&state);
|
| + EXPECT_ACTION_UPDATE_STATE(
|
| + SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
| + state.DidSwapBuffersComplete();
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
| +
|
| + // Finish the previous commit and draw it.
|
| + FinishPreviousCommitAndDrawWithoutExitingDeadline(&state);
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
| +
|
| + // Verify we do not send another BeginMainFrame if was are swap throttled
|
| + // and 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);
|
| }
|
|
|
| TEST(SchedulerStateMachineTest, TestTriggerDeadlineEarlyOnLostOutputSurface) {
|
|
|