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 67925a059b39b2295b977f9cacb5cc28ed487ba5..c67ae4d3f4036ab08cbdef5ffd0608eae48a52d3 100644 |
| --- a/cc/scheduler/scheduler_state_machine_unittest.cc |
| +++ b/cc/scheduler/scheduler_state_machine_unittest.cc |
| @@ -173,8 +173,7 @@ TEST(SchedulerStateMachineTest, TestNextActionBeginsMainFrameIfNeeded) { |
| } |
| } |
| -TEST(SchedulerStateMachineTest, |
| - TestFailedDrawSetsNeedsCommitAndDoesNotDrawAgain) { |
| +TEST(SchedulerStateMachineTest, TestFailedDrawSetsRedrawAndCommitFlags) { |
| SchedulerSettings default_scheduler_settings; |
| StateMachine state(default_scheduler_settings); |
| state.SetCanStart(); |
| @@ -185,25 +184,42 @@ TEST(SchedulerStateMachineTest, |
| state.SetNeedsRedraw(true); |
| EXPECT_TRUE(state.RedrawPending()); |
| EXPECT_TRUE(state.BeginImplFrameNeeded()); |
| - state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| - EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| - state.OnBeginImplFrameDeadline(); |
| - // We're drawing now. |
| - EXPECT_ACTION_UPDATE_STATE( |
| - SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| - EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| + DrawSwapReadbackResult::DrawResult aborts[] = { |
|
brianderson
2014/01/29 01:31:22
Thanks for testing all the new abort results.
|
| + DrawSwapReadbackResult::DRAW_ABORTED_CANT_DRAW, |
| + DrawSwapReadbackResult::DRAW_ABORTED_NO_TREE, |
| + DrawSwapReadbackResult::DRAW_ABORTED_NO_RENDERER, |
| + DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS, }; |
| - EXPECT_FALSE(state.RedrawPending()); |
| - EXPECT_FALSE(state.CommitPending()); |
| + for (size_t i = 0; i < arraysize(aborts); ++i) { |
| + state.SetNeedsRedraw(true); |
| + state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| + state.OnBeginImplFrameDeadline(); |
| - // Failing the draw makes us require a commit. |
| - state.DidDrawIfPossibleCompleted(false); |
| - state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| - EXPECT_ACTION_UPDATE_STATE( |
| - SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| - EXPECT_TRUE(state.RedrawPending()); |
| - EXPECT_TRUE(state.CommitPending()); |
| + EXPECT_ACTION_UPDATE_STATE( |
| + SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| + EXPECT_FALSE(state.RedrawPending()); |
| + EXPECT_FALSE(state.CommitPending()); |
| + |
| + state.DidDrawIfPossibleCompleted(aborts[i]); |
| + |
| + if (aborts[i] == |
| + DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS) { |
| + // Failing the draw for checkerboarding causes a commit/redraw. |
| + state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| + EXPECT_ACTION_UPDATE_STATE( |
| + SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| + EXPECT_TRUE(state.RedrawPending()); |
| + EXPECT_TRUE(state.CommitPending()); |
| + } else { |
| + // Failing the draw for most reasons does not require a commit or a |
| + // redraw. |
| + EXPECT_FALSE(state.RedrawPending()); |
| + EXPECT_FALSE(state.CommitPending()); |
| + } |
| + } |
| } |
| TEST(SchedulerStateMachineTest, |
| @@ -235,8 +251,9 @@ TEST(SchedulerStateMachineTest, |
| state.SetNeedsRedraw(true); |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| - // Failing the draw makes us require a commit. |
| - state.DidDrawIfPossibleCompleted(false); |
| + // Failing the draw for animation checkerboards makes us require a commit. |
| + state.DidDrawIfPossibleCompleted( |
| + DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| EXPECT_ACTION_UPDATE_STATE( |
| SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| @@ -277,7 +294,8 @@ void TestFailedDrawsWillEventuallyForceADrawAfterTheNextCommit( |
| SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| // Fail the draw. |
| - state.DidDrawIfPossibleCompleted(false); |
| + state.DidDrawIfPossibleCompleted( |
| + DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| EXPECT_TRUE(state.BeginImplFrameNeeded()); |
| EXPECT_TRUE(state.RedrawPending()); |
| @@ -316,9 +334,9 @@ TEST(SchedulerStateMachineTest, |
| void TestFailedDrawsDoNotRestartForcedDraw( |
| bool deadline_scheduling_enabled) { |
| SchedulerSettings scheduler_settings; |
| - int drawLimit = 1; |
| + int draw_limit = 1; |
| scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ = |
| - drawLimit; |
| + draw_limit; |
| scheduler_settings.deadline_scheduling_enabled = deadline_scheduling_enabled; |
| scheduler_settings.impl_side_painting = true; |
| StateMachine state(scheduler_settings); |
| @@ -351,9 +369,10 @@ void TestFailedDrawsDoNotRestartForcedDraw( |
| // Fail the draw enough times to force a redraw, |
| // then once more for good measure. |
| - for (int i = 0; i < drawLimit; ++i) |
| - state.DidDrawIfPossibleCompleted(false); |
| - state.DidDrawIfPossibleCompleted(false); |
| + for (int i = 0; i < draw_limit + 1; ++i) { |
| + state.DidDrawIfPossibleCompleted( |
| + DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| + } |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| EXPECT_TRUE(state.BeginImplFrameNeeded()); |
| EXPECT_TRUE(state.RedrawPending()); |
| @@ -374,9 +393,10 @@ void TestFailedDrawsDoNotRestartForcedDraw( |
| // After failing additional draws, we should still be in a forced |
| // redraw, but not back in WAITING_FOR_COMMIT. |
| - for (int i = 0; i < drawLimit; ++i) |
| - state.DidDrawIfPossibleCompleted(false); |
| - state.DidDrawIfPossibleCompleted(false); |
| + for (int i = 0; i < draw_limit + 1; ++i) { |
| + state.DidDrawIfPossibleCompleted( |
| + DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| + } |
| EXPECT_TRUE(state.RedrawPending()); |
| EXPECT_TRUE(state.ForcedRedrawState() == |
| SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION); |
| @@ -415,8 +435,9 @@ TEST(SchedulerStateMachineTest, TestFailedDrawIsRetriedInNextBeginImplFrame) { |
| EXPECT_ACTION_UPDATE_STATE( |
| SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| - // Fail the draw |
| - state.DidDrawIfPossibleCompleted(false); |
| + // Failing the draw for animation checkerboards makes us require a commit. |
| + state.DidDrawIfPossibleCompleted( |
| + DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| EXPECT_ACTION_UPDATE_STATE( |
| SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| @@ -453,7 +474,7 @@ TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) { |
| state.OnBeginImplFrameDeadline(); |
| EXPECT_ACTION_UPDATE_STATE( |
| SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| - state.DidDrawIfPossibleCompleted(true); |
| + state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DID_DRAW); |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| // Before the next BeginImplFrame, set needs redraw again. |
| @@ -470,7 +491,7 @@ TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) { |
| state.OnBeginImplFrameDeadline(); |
| EXPECT_ACTION_UPDATE_STATE( |
| SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| - state.DidDrawIfPossibleCompleted(true); |
| + state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DID_DRAW); |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| // We just swapped, so we should proactively request another BeginImplFrame. |
| @@ -715,7 +736,7 @@ TEST(SchedulerStateMachineTest, TestsetNeedsCommitIsNotLost) { |
| state.CommitState()); |
| EXPECT_ACTION_UPDATE_STATE( |
| SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| - state.DidDrawIfPossibleCompleted(true); |
| + state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DID_DRAW); |
| // Verify that another commit will start immediately after draw. |
| EXPECT_ACTION_UPDATE_STATE( |
| @@ -762,7 +783,7 @@ TEST(SchedulerStateMachineTest, TestFullCycle) { |
| state.OnBeginImplFrameDeadline(); |
| EXPECT_ACTION_UPDATE_STATE( |
| SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| - state.DidDrawIfPossibleCompleted(true); |
| + state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DID_DRAW); |
| // Should be synchronized, no draw needed, no action needed. |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| @@ -813,7 +834,7 @@ TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) { |
| state.OnBeginImplFrameDeadline(); |
| EXPECT_ACTION_UPDATE_STATE( |
| SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| - state.DidDrawIfPossibleCompleted(true); |
| + state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DID_DRAW); |
| // Should be synchronized, no draw needed, no action needed. |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| @@ -1449,7 +1470,7 @@ TEST(SchedulerStateMachineTest, TestImmediateFinishCommit) { |
| state.CommitState()); |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); |
| - state.DidDrawIfPossibleCompleted(true); |
| + state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DID_DRAW); |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| @@ -1492,7 +1513,7 @@ void TestImmediateFinishCommitDuringCommit(bool deadline_scheduling_enabled) { |
| state.CommitState()); |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); |
| - state.DidDrawIfPossibleCompleted(true); |
| + state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DID_DRAW); |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| // Should be waiting for the normal BeginMainFrame. |
| @@ -1546,7 +1567,7 @@ void ImmediateBeginMainFrameAbortedWhileInvisible( |
| state.CommitState()); |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); |
| - state.DidDrawIfPossibleCompleted(true); |
| + state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DID_DRAW); |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| // Should be waiting for BeginMainFrame. |
| @@ -1602,7 +1623,7 @@ TEST(SchedulerStateMachineTest, ImmediateFinishCommitWhileCantDraw) { |
| state.CommitState()); |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); |
| - state.DidDrawIfPossibleCompleted(true); |
| + state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DID_DRAW); |
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| } |