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 d0595db4c501ca9f06cd54cbea11b95f0433c786..c433bba9951ce35093a2a08d1ea0bd314c6081cb 100644 |
--- a/cc/scheduler/scheduler_state_machine_unittest.cc |
+++ b/cc/scheduler/scheduler_state_machine_unittest.cc |
@@ -35,18 +35,18 @@ |
EXPECT_ENUM_EQ(ActionToString, expected, state.NextAction()) \ |
<< state.AsValue()->ToString() |
-#define EXPECT_ACTION_UPDATE_STATE(action) \ |
- EXPECT_ACTION(action); \ |
- if (action == SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE || \ |
- action == SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED) { \ |
- EXPECT_IMPL_FRAME_STATE( \ |
- SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); \ |
- } \ |
- PerformAction(&state, action); \ |
- if (action == SchedulerStateMachine::ACTION_NONE) { \ |
- if (state.begin_impl_frame_state() == \ |
- SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE) \ |
- state.OnBeginImplFrameIdle(); \ |
+#define EXPECT_ACTION_UPDATE_STATE(action) \ |
+ EXPECT_ACTION(action); \ |
+ if (action == SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE || \ |
+ action == SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED) { \ |
+ EXPECT_IMPL_FRAME_STATE( \ |
+ SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); \ |
+ } \ |
+ PerformAction(&state, action); \ |
+ if (action == SchedulerStateMachine::ACTION_NONE) { \ |
+ if (state.begin_impl_frame_state() == \ |
+ SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE) \ |
+ state.OnBeginImplFrameIdle(); \ |
} |
#define SET_UP_STATE(state) \ |
@@ -62,11 +62,9 @@ |
namespace { |
const SchedulerStateMachine::BeginImplFrameState all_begin_impl_frame_states[] = |
- { |
- SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE, |
- SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME, |
- SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE, |
-}; |
+ {SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE, |
+ SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME, |
+ SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE, }; |
const SchedulerStateMachine::BeginMainFrameState begin_main_frame_states[] = { |
SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE, |
@@ -1117,70 +1115,55 @@ |
// Commit. |
EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
- // Now commit should wait for activation but only momentarily. |
+ |
+ // Now commit should wait for activation. |
EXPECT_MAIN_FRAME_STATE( |
SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_WAITING_FOR_ACTIVATION); |
- // Commit always calls NotifyReadyToActivate in this mode. |
+ // No activation yet, so this commit is not drawn yet. Force to draw this |
+ // frame, and still block BeginMainFrame. |
+ state.SetNeedsRedraw(true); |
+ state.SetNeedsBeginMainFrame(); |
+ state.OnBeginImplFrameDeadline(); |
+ EXPECT_ACTION_UPDATE_STATE( |
+ SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
+ EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
+ |
+ // Cannot BeginMainFrame yet since last commit is not yet activated and drawn. |
+ state.OnBeginImplFrame(); |
+ EXPECT_MAIN_FRAME_STATE( |
+ SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_WAITING_FOR_ACTIVATION); |
+ EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
+ |
+ // Now activate sync tree. |
state.NotifyReadyToActivate(); |
EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); |
+ EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
+ EXPECT_TRUE(state.active_tree_needs_first_draw()); |
+ EXPECT_TRUE(state.needs_redraw()); |
EXPECT_MAIN_FRAME_STATE( |
SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_WAITING_FOR_DRAW); |
- // No draw because we haven't received NotifyReadyToDraw yet. |
- state.OnBeginImplFrameDeadline(); |
- EXPECT_TRUE(state.active_tree_needs_first_draw()); |
- EXPECT_TRUE(state.needs_redraw()); |
- EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
- |
- // Cannot BeginMainFrame yet since last commit is not ready to draw. |
- state.SetNeedsBeginMainFrame(); |
- state.OnBeginImplFrame(); |
- EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
- EXPECT_MAIN_FRAME_STATE( |
- SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_WAITING_FOR_DRAW); |
- |
- // Now call ready to draw which will allow the draw to happen and |
- // BeginMainFrame to be sent. |
- state.NotifyReadyToDraw(); |
- state.OnBeginImplFrameDeadline(); |
- EXPECT_ACTION_UPDATE_STATE( |
- SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
- EXPECT_ACTION_UPDATE_STATE( |
- SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
+ // Swap throttled. Do not draw. |
state.DidSwapBuffers(); |
- |
- // Swap throttled from this point. |
- state.OnBeginImplFrame(); |
- EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
- |
- // Commit, activate and notify ready to draw. |
- state.NotifyBeginMainFrameStarted(); |
- state.NotifyReadyToCommit(); |
- EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
- state.NotifyReadyToActivate(); |
- EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); |
- state.NotifyReadyToDraw(); |
- EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
- |
- // Swap throttled. Do not draw. |
- state.OnBeginImplFrameDeadline(); |
- EXPECT_TRUE(state.active_tree_needs_first_draw()); |
- EXPECT_TRUE(state.needs_redraw()); |
- EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
- |
- // Haven't drawn since last commit, do not begin new main frame. |
- state.SetNeedsBeginMainFrame(); |
- state.OnBeginImplFrame(); |
- EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
- EXPECT_MAIN_FRAME_STATE( |
- SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_WAITING_FOR_DRAW); |
- |
- // Swap ack and draw which also unblocks BeginMainFrame. |
+ state.OnBeginImplFrameDeadline(); |
+ EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
state.DidSwapBuffersComplete(); |
- state.OnBeginImplFrameDeadline(); |
- EXPECT_ACTION_UPDATE_STATE( |
- SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
+ |
+ // Haven't draw since last commit, do not begin new main frame. |
+ state.OnBeginImplFrame(); |
+ EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
+ |
+ // At BeginImplFrame deadline, draw. This draws unblocks BeginMainFrame. |
+ state.OnBeginImplFrameDeadline(); |
+ EXPECT_ACTION_UPDATE_STATE( |
+ SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
+ state.DidSwapBuffers(); |
+ state.DidSwapBuffersComplete(); |
+ |
+ // Now will be able to start main frame. |
+ EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); |
+ EXPECT_FALSE(state.needs_redraw()); |
EXPECT_ACTION_UPDATE_STATE( |
SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
} |