| 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 7036459794ffd34cc16364b34fba0d55cd65b478..1bd92f36d1a0f25bed5640a05ce171c001b254f7 100644
|
| --- a/cc/scheduler/scheduler_state_machine_unittest.cc
|
| +++ b/cc/scheduler/scheduler_state_machine_unittest.cc
|
| @@ -718,7 +718,7 @@ TEST(SchedulerStateMachineTest, TestGoesInvisibleBeforeFinishCommit) {
|
|
|
| // Become invisible and abort the main thread's begin frame.
|
| state.SetVisible(false);
|
| - state.BeginFrameAbortedByMainThread();
|
| + state.BeginFrameAbortedByMainThread(false);
|
|
|
| // We should now be back in the idle state as if we didn't start a frame at
|
| // all.
|
| @@ -728,8 +728,14 @@ TEST(SchedulerStateMachineTest, TestGoesInvisibleBeforeFinishCommit) {
|
| // Become visible again.
|
| state.SetVisible(true);
|
|
|
| - // We should be beginning a frame now.
|
| + // Although we have aborted on this frame and haven't cancelled the commit
|
| + // (i.e. need another), don't send another begin frame yet.
|
| EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState());
|
| + EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
|
| + EXPECT_TRUE(state.NeedsCommit());
|
| +
|
| + // Start a new frame.
|
| + state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
|
| EXPECT_EQ(SchedulerStateMachine::ACTION_SEND_BEGIN_FRAME_TO_MAIN_THREAD,
|
| state.NextAction());
|
|
|
| @@ -741,6 +747,51 @@ TEST(SchedulerStateMachineTest, TestGoesInvisibleBeforeFinishCommit) {
|
| state.CommitState());
|
| }
|
|
|
| +TEST(SchedulerStateMachineTest, AbortBeginFrameAndCancelCommit) {
|
| + SchedulerSettings default_scheduler_settings;
|
| + StateMachine state(default_scheduler_settings);
|
| + state.SetCanStart();
|
| + state.UpdateState(state.NextAction());
|
| + state.DidCreateAndInitializeOutputSurface();
|
| + state.SetVisible(true);
|
| + state.SetCanDraw(true);
|
| +
|
| + // Get into a begin frame / commit state.
|
| + state.SetNeedsCommit();
|
| + EXPECT_EQ(SchedulerStateMachine::ACTION_SEND_BEGIN_FRAME_TO_MAIN_THREAD,
|
| + state.NextAction());
|
| + state.UpdateState(
|
| + SchedulerStateMachine::ACTION_SEND_BEGIN_FRAME_TO_MAIN_THREAD);
|
| + EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS,
|
| + state.CommitState());
|
| + EXPECT_FALSE(state.NeedsCommit());
|
| + EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
|
| +
|
| + // Abort the commit, cancelling future commits.
|
| + state.BeginFrameAbortedByMainThread(true);
|
| +
|
| + // Verify that another commit doesn't start on the same frame.
|
| + EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState());
|
| + EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
|
| + EXPECT_FALSE(state.NeedsCommit());
|
| +
|
| + // Start a new frame.
|
| + state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
|
| + EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
|
| + state.DidLeaveBeginFrame();
|
| +
|
| + // Verify another commit doesn't start on another frame either.
|
| + EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState());
|
| + EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
|
| + EXPECT_FALSE(state.NeedsCommit());
|
| +
|
| + // Verify another commit can start if requested, though.
|
| + state.SetNeedsCommit();
|
| + EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState());
|
| + EXPECT_EQ(SchedulerStateMachine::ACTION_SEND_BEGIN_FRAME_TO_MAIN_THREAD,
|
| + state.NextAction());
|
| +}
|
| +
|
| TEST(SchedulerStateMachineTest, TestFirstContextCreation) {
|
| SchedulerSettings default_scheduler_settings;
|
| StateMachine state(default_scheduler_settings);
|
| @@ -1192,7 +1243,7 @@ TEST(SchedulerStateMachineTest,
|
|
|
| // Become invisible and abort the main thread's begin frame.
|
| state.SetVisible(false);
|
| - state.BeginFrameAbortedByMainThread();
|
| + state.BeginFrameAbortedByMainThread(false);
|
|
|
| // Should be back in the idle state, but needing a commit.
|
| EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState());
|
|
|