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 8f07c8672ee4e19fe48a93dd941dd6e10dac064d..c110a0df28ccfd17e7763b5670fc84bf36e270e8 100644 |
--- a/cc/scheduler/scheduler_state_machine_unittest.cc |
+++ b/cc/scheduler/scheduler_state_machine_unittest.cc |
@@ -40,7 +40,7 @@ |
EXPECT_IMPL_FRAME_STATE( \ |
SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); \ |
} \ |
- state.UpdateState(action); \ |
+ WillPerformAction(&state, action); \ |
if (action == SchedulerStateMachine::ACTION_NONE) { \ |
if (state.begin_impl_frame_state() == \ |
SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING) \ |
@@ -50,17 +50,70 @@ |
state.OnBeginImplFrameIdle(); \ |
} |
-#define SET_UP_STATE(state) \ |
- state.SetCanStart(); \ |
- state.UpdateState(state.NextAction()); \ |
- state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); \ |
- state.SetVisible(true); \ |
+#define SET_UP_STATE(state) \ |
+ state.SetCanStart(); \ |
+ EXPECT_ACTION_UPDATE_STATE( \ |
+ SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); \ |
+ EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); \ |
+ state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); \ |
+ state.SetVisible(true); \ |
state.SetCanDraw(true); |
namespace cc { |
namespace { |
+void WillPerformAction(SchedulerStateMachine* sm, |
+ SchedulerStateMachine::Action action) { |
+ switch (action) { |
+ case SchedulerStateMachine::ACTION_NONE: |
+ return; |
+ |
+ case SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE: |
+ sm->WillActivate(); |
+ return; |
+ |
+ case SchedulerStateMachine::ACTION_ANIMATE: |
+ sm->WillAnimate(); |
+ return; |
+ |
+ case SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME: |
+ sm->WillSendBeginMainFrame(); |
+ return; |
+ |
+ case SchedulerStateMachine::ACTION_COMMIT: { |
+ bool commit_has_no_updates = false; |
+ sm->WillCommit(commit_has_no_updates); |
+ return; |
+ } |
+ |
+ case SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED: |
+ case SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE: { |
+ bool did_request_swap = true; |
+ sm->WillDraw(did_request_swap); |
+ return; |
+ } |
+ |
+ case SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT: { |
+ bool did_request_swap = false; |
+ sm->WillDraw(did_request_swap); |
+ return; |
+ } |
+ |
+ case SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION: |
+ sm->WillBeginOutputSurfaceCreation(); |
+ return; |
+ |
+ case SchedulerStateMachine::ACTION_PREPARE_TILES: |
+ sm->WillPrepareTiles(); |
+ return; |
+ |
+ case SchedulerStateMachine::ACTION_INVALIDATE_OUTPUT_SURFACE: |
+ sm->WillInvalidateOutputSurface(); |
+ return; |
+ } |
+} |
+ |
const SchedulerStateMachine::BeginImplFrameState all_begin_impl_frame_states[] = |
{SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE, |
SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING, |
@@ -146,7 +199,7 @@ class StateMachine : public SchedulerStateMachine { |
using SchedulerStateMachine::ShouldTriggerBeginImplFrameDeadlineImmediately; |
using SchedulerStateMachine::ProactiveBeginFrameWanted; |
- using SchedulerStateMachine::UpdateStateOnCommit; |
+ using SchedulerStateMachine::WillCommit; |
}; |
TEST(SchedulerStateMachineTest, BeginFrameNeeded) { |
@@ -154,7 +207,8 @@ TEST(SchedulerStateMachineTest, BeginFrameNeeded) { |
StateMachine state(default_scheduler_settings); |
state.SetCanStart(); |
EXPECT_ACTION_UPDATE_STATE( |
- SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION) |
+ SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
+ EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
state.SetBeginMainFrameState( |
SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); |
@@ -202,7 +256,8 @@ TEST(SchedulerStateMachineTest, TestNextActionBeginsMainFrameIfNeeded) { |
StateMachine state(default_scheduler_settings); |
state.SetCanStart(); |
EXPECT_ACTION_UPDATE_STATE( |
- SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION) |
+ SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
+ EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
state.SetBeginMainFrameState( |
SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); |
@@ -246,7 +301,9 @@ TEST(SchedulerStateMachineTest, TestNextActionBeginsMainFrameIfNeeded) { |
state.SetBeginMainFrameState( |
SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); |
state.SetCanStart(); |
- state.UpdateState(state.NextAction()); |
+ EXPECT_ACTION_UPDATE_STATE( |
+ SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
+ EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
state.SetNeedsRedraw(false); |
state.SetVisible(true); |
@@ -272,7 +329,9 @@ TEST(SchedulerStateMachineTest, TestNextActionBeginsMainFrameIfNeeded) { |
state.SetBeginMainFrameState( |
SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); |
state.SetCanStart(); |
- state.UpdateState(state.NextAction()); |
+ EXPECT_ACTION_UPDATE_STATE( |
+ SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
+ EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
state.SetNeedsRedraw(false); |
state.SetVisible(true); |
@@ -662,7 +721,9 @@ TEST(SchedulerStateMachineTest, TestNextActionDrawsOnBeginImplFrame) { |
for (size_t j = 0; j < num_begin_impl_frame_states; ++j) { |
StateMachine state(default_scheduler_settings); |
state.SetCanStart(); |
- state.UpdateState(state.NextAction()); |
+ EXPECT_ACTION_UPDATE_STATE( |
+ SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
+ EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
state.SetBeginMainFrameState(begin_main_frame_states[i]); |
state.SetBeginImplFrameState(all_begin_impl_frame_states[j]); |
@@ -688,7 +749,9 @@ TEST(SchedulerStateMachineTest, TestNextActionDrawsOnBeginImplFrame) { |
for (size_t i = 0; i < num_begin_main_frame_states; ++i) { |
StateMachine state(default_scheduler_settings); |
state.SetCanStart(); |
- state.UpdateState(state.NextAction()); |
+ EXPECT_ACTION_UPDATE_STATE( |
+ SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
+ EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
state.SetCanDraw(true); |
state.SetBeginMainFrameState(begin_main_frame_states[i]); |
@@ -704,8 +767,7 @@ TEST(SchedulerStateMachineTest, TestNextActionDrawsOnBeginImplFrame) { |
expected_action = SchedulerStateMachine::ACTION_COMMIT; |
} else { |
expected_action = SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE; |
- EXPECT_ACTION(SchedulerStateMachine::ACTION_ANIMATE); |
- state.UpdateState(state.NextAction()); |
+ EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
} |
// Case 1: needs_begin_main_frame=false. |
@@ -728,7 +790,9 @@ TEST(SchedulerStateMachineTest, TestNoBeginMainFrameStatesRedrawWhenInvisible) { |
for (size_t j = 0; j < 2; ++j) { |
StateMachine state(default_scheduler_settings); |
state.SetCanStart(); |
- state.UpdateState(state.NextAction()); |
+ EXPECT_ACTION_UPDATE_STATE( |
+ SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
+ EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
state.SetBeginMainFrameState(begin_main_frame_states[i]); |
state.SetVisible(false); |
@@ -762,7 +826,9 @@ TEST(SchedulerStateMachineTest, TestCanRedraw_StopsDraw) { |
for (size_t j = 0; j < 2; ++j) { |
StateMachine state(default_scheduler_settings); |
state.SetCanStart(); |
- state.UpdateState(state.NextAction()); |
+ EXPECT_ACTION_UPDATE_STATE( |
+ SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
+ EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
state.SetBeginMainFrameState(begin_main_frame_states[i]); |
state.SetVisible(false); |
@@ -782,7 +848,9 @@ TEST(SchedulerStateMachineTest, |
SchedulerSettings default_scheduler_settings; |
StateMachine state(default_scheduler_settings); |
state.SetCanStart(); |
- state.UpdateState(state.NextAction()); |
+ EXPECT_ACTION_UPDATE_STATE( |
+ SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
+ EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
state.SetActiveTreeNeedsFirstDraw(true); |
@@ -1125,7 +1193,9 @@ TEST(SchedulerStateMachineTest, TestRequestCommitInvisible) { |
SchedulerSettings default_scheduler_settings; |
StateMachine state(default_scheduler_settings); |
state.SetCanStart(); |
- state.UpdateState(state.NextAction()); |
+ EXPECT_ACTION_UPDATE_STATE( |
+ SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
+ EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
state.SetNeedsBeginMainFrame(); |
EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
@@ -1189,7 +1259,9 @@ TEST(SchedulerStateMachineTest, TestAbortBeginMainFrameBecauseCommitNotNeeded) { |
SchedulerSettings default_scheduler_settings; |
StateMachine state(default_scheduler_settings); |
state.SetCanStart(); |
- state.UpdateState(state.NextAction()); |
+ EXPECT_ACTION_UPDATE_STATE( |
+ SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
+ EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
state.DidCreateAndInitializeOutputSurface(); |
state.SetVisible(true); |
state.SetCanDraw(true); |
@@ -1270,8 +1342,9 @@ TEST(SchedulerStateMachineTest, TestContextLostWhenCompletelyIdle) { |
state.NextAction()); |
state.DidLoseOutputSurface(); |
- EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
- state.UpdateState(state.NextAction()); |
+ EXPECT_ACTION_UPDATE_STATE( |
+ SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
+ EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
// Once context recreation begins, nothing should happen. |
EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
@@ -1566,8 +1639,9 @@ TEST(SchedulerStateMachineTest, DontDrawBeforeCommitAfterLostOutputSurface) { |
// Cause a lost output surface, and restore it. |
state.DidLoseOutputSurface(); |
- EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
- state.UpdateState(state.NextAction()); |
+ EXPECT_ACTION_UPDATE_STATE( |
+ SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
+ EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
state.DidCreateAndInitializeOutputSurface(); |
EXPECT_FALSE(state.RedrawPending()); |
@@ -1602,7 +1676,9 @@ TEST(SchedulerStateMachineTest, TestNoBeginFrameNeededWhenInvisible) { |
SchedulerSettings default_scheduler_settings; |
StateMachine state(default_scheduler_settings); |
state.SetCanStart(); |
- state.UpdateState(state.NextAction()); |
+ EXPECT_ACTION_UPDATE_STATE( |
+ SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
+ EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
state.SetVisible(true); |
@@ -1621,7 +1697,9 @@ TEST(SchedulerStateMachineTest, TestNoBeginMainFrameWhenInvisible) { |
SchedulerSettings default_scheduler_settings; |
StateMachine state(default_scheduler_settings); |
state.SetCanStart(); |
- state.UpdateState(state.NextAction()); |
+ EXPECT_ACTION_UPDATE_STATE( |
+ SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
+ EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
state.SetVisible(false); |
state.SetNeedsBeginMainFrame(); |
@@ -1640,23 +1718,24 @@ TEST(SchedulerStateMachineTest, TestFinishCommitWhenCommitInProgress) { |
SchedulerSettings default_scheduler_settings; |
StateMachine state(default_scheduler_settings); |
state.SetCanStart(); |
- state.UpdateState(state.NextAction()); |
+ EXPECT_ACTION_UPDATE_STATE( |
+ SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
+ EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
state.SetVisible(false); |
state.SetBeginMainFrameState( |
SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT); |
state.SetNeedsBeginMainFrame(); |
+ // After the commit completes, activation and draw happen immediately |
+ // because we are not visible. |
state.NotifyBeginMainFrameStarted(); |
state.NotifyReadyToCommit(); |
- EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); |
- state.UpdateState(state.NextAction()); |
- state.NotifyReadyToActivate(); |
- EXPECT_ACTION(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); |
- state.UpdateState(state.NextAction()); |
- |
+ EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
+ EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); |
EXPECT_TRUE(state.active_tree_needs_first_draw()); |
EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); |
+ EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
} |
TEST(SchedulerStateMachineTest, TestInitialActionsWhenContextLost) { |
@@ -1982,7 +2061,7 @@ TEST(SchedulerStateMachineTest, EarlyOutCommitWantsProactiveBeginFrame) { |
EXPECT_FALSE(state.ProactiveBeginFrameWanted()); |
bool commit_has_no_updates = true; |
- state.UpdateStateOnCommit(commit_has_no_updates); |
+ state.WillCommit(commit_has_no_updates); |
EXPECT_TRUE(state.ProactiveBeginFrameWanted()); |
state.OnBeginImplFrame(); |
EXPECT_FALSE(state.ProactiveBeginFrameWanted()); |