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..6d425c9ec86d41aa215693079e673368dbfbcbf0 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,17 +728,61 @@ 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()); |
+} |
- // Begin the frame. |
+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); |
- // We should be starting the commit now. |
danakj
2013/07/17 20:53:24
Why is this stuff removed?
enne (OOO)
2013/07/18 17:36:37
I put it back, but the important part of the test
|
+ // 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) { |
@@ -1192,7 +1236,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()); |