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); |
} |