| 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 2e4a7bbb688ffb2c32e8817ef9ccb408cdc1bc58..f31dabb85954a223c9e176ea00699f896626b140 100644
|
| --- a/cc/scheduler/scheduler_state_machine_unittest.cc
|
| +++ b/cc/scheduler/scheduler_state_machine_unittest.cc
|
| @@ -11,11 +11,6 @@
|
| EXPECT_EQ(action, state.NextAction()) << *state.AsValue(); \
|
| if (action == SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE || \
|
| action == SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED) { \
|
| - if (SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW == \
|
| - state.CommitState() && \
|
| - SchedulerStateMachine::OUTPUT_SURFACE_ACTIVE != \
|
| - state.output_surface_state()) \
|
| - return; \
|
| EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE, \
|
| state.begin_impl_frame_state()) \
|
| << *state.AsValue(); \
|
| @@ -45,7 +40,8 @@ const SchedulerStateMachine::CommitState all_commit_states[] = {
|
| SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT,
|
| SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_STARTED,
|
| SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT,
|
| - SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, };
|
| + SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_ACTIVATION,
|
| + SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW};
|
|
|
| // Exposes the protected state fields of the SchedulerStateMachine for testing
|
| class StateMachine : public SchedulerStateMachine {
|
| @@ -85,7 +81,7 @@ class StateMachine : public SchedulerStateMachine {
|
|
|
| void SetNeedsForcedRedrawForTimeout(bool b) {
|
| forced_redraw_state_ = FORCED_REDRAW_STATE_WAITING_FOR_COMMIT;
|
| - commit_state_ = COMMIT_STATE_WAITING_FOR_FIRST_DRAW;
|
| + active_tree_needs_first_draw_ = true;
|
| }
|
| bool NeedsForcedRedrawForTimeout() const {
|
| return forced_redraw_state_ != FORCED_REDRAW_STATE_IDLE;
|
| @@ -93,7 +89,7 @@ class StateMachine : public SchedulerStateMachine {
|
|
|
| void SetNeedsForcedRedrawForReadback() {
|
| readback_state_ = READBACK_STATE_WAITING_FOR_DRAW_AND_READBACK;
|
| - commit_state_ = COMMIT_STATE_WAITING_FOR_FIRST_DRAW;
|
| + active_tree_needs_first_draw_ = true;
|
| }
|
|
|
| bool NeedsForcedRedrawForReadback() const {
|
| @@ -185,6 +181,135 @@ TEST(SchedulerStateMachineTest, TestNextActionBeginsMainFrameIfNeeded) {
|
| }
|
| }
|
|
|
| +// Explicitly test main_frame_before_draw_enabled = false
|
| +TEST(SchedulerStateMachineTest, MainFrameBeforeDrawDisabled) {
|
| + SchedulerSettings scheduler_settings;
|
| + scheduler_settings.impl_side_painting = true;
|
| + scheduler_settings.main_frame_before_draw_enabled = false;
|
| + StateMachine state(scheduler_settings);
|
| + state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE);
|
| + state.SetCanStart();
|
| + state.UpdateState(state.NextAction());
|
| + state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
|
| + state.SetNeedsRedraw(false);
|
| + state.SetVisible(true);
|
| + state.SetCanDraw(true);
|
| + state.SetNeedsCommit();
|
| +
|
| + EXPECT_TRUE(state.BeginImplFrameNeeded());
|
| +
|
| + // Commit to the pending tree.
|
| + state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
|
| + EXPECT_ACTION_UPDATE_STATE(
|
| + SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
| + state.NotifyBeginMainFrameStarted();
|
| + state.NotifyReadyToCommit();
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
| + EXPECT_EQ(state.CommitState(),
|
| + SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW);
|
| +
|
| + state.OnBeginImplFrameDeadline();
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
| + EXPECT_EQ(state.CommitState(),
|
| + SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW);
|
| +
|
| + // Verify that the next commit doesn't start until the previous
|
| + // commit has been drawn.
|
| + state.SetNeedsCommit();
|
| + state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
| +
|
| + // Verify NotifyReadyToActivate unblocks activation, draw, and
|
| + // commit in that order.
|
| + state.NotifyReadyToActivate();
|
| + EXPECT_ACTION_UPDATE_STATE(
|
| + SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE);
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
| + EXPECT_EQ(state.CommitState(),
|
| + SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW);
|
| +
|
| + EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly());
|
| + state.OnBeginImplFrameDeadline();
|
| + EXPECT_ACTION_UPDATE_STATE(
|
| + SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
|
| + EXPECT_EQ(state.CommitState(), SchedulerStateMachine::COMMIT_STATE_IDLE);
|
| + EXPECT_ACTION_UPDATE_STATE(
|
| + SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
| + EXPECT_EQ(state.CommitState(),
|
| + SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT);
|
| +
|
| + state.NotifyBeginMainFrameStarted();
|
| + state.NotifyReadyToCommit();
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
| + EXPECT_EQ(state.CommitState(),
|
| + SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW);
|
| +}
|
| +
|
| +// Explicitly test main_frame_before_activation_enabled = true
|
| +TEST(SchedulerStateMachineTest, MainFrameBeforeActivationEnabled) {
|
| + SchedulerSettings scheduler_settings;
|
| + scheduler_settings.impl_side_painting = true;
|
| + scheduler_settings.main_frame_before_activation_enabled = true;
|
| + StateMachine state(scheduler_settings);
|
| + state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE);
|
| + state.SetCanStart();
|
| + state.UpdateState(state.NextAction());
|
| + state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
|
| + state.SetNeedsRedraw(false);
|
| + state.SetVisible(true);
|
| + state.SetCanDraw(true);
|
| + state.SetNeedsCommit();
|
| +
|
| + EXPECT_TRUE(state.BeginImplFrameNeeded());
|
| +
|
| + // Commit to the pending tree.
|
| + state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
|
| + EXPECT_ACTION_UPDATE_STATE(
|
| + SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
| +
|
| + state.NotifyBeginMainFrameStarted();
|
| + state.NotifyReadyToCommit();
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
| + EXPECT_EQ(state.CommitState(), SchedulerStateMachine::COMMIT_STATE_IDLE);
|
| +
|
| + state.OnBeginImplFrameDeadline();
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
| +
|
| + // Verify that the next commit starts while there is still a pending tree.
|
| + state.SetNeedsCommit();
|
| + state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
|
| + EXPECT_ACTION_UPDATE_STATE(
|
| + SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
| +
|
| + // Verify the pending commit doesn't overwrite the pending
|
| + // tree until the pending tree has been activated.
|
| + state.NotifyBeginMainFrameStarted();
|
| + state.NotifyReadyToCommit();
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
| +
|
| + // Verify NotifyReadyToActivate unblocks activation, draw, and
|
| + // commit in that order.
|
| + state.NotifyReadyToActivate();
|
| + EXPECT_ACTION_UPDATE_STATE(
|
| + SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE);
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
| +
|
| + EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly());
|
| + state.OnBeginImplFrameDeadline();
|
| + EXPECT_ACTION_UPDATE_STATE(
|
| + SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
|
| + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
| + EXPECT_EQ(state.CommitState(), SchedulerStateMachine::COMMIT_STATE_IDLE);
|
| +}
|
| +
|
| TEST(SchedulerStateMachineTest,
|
| TestFailedDrawForAnimationCheckerboardSetsNeedsCommitAndDoesNotDrawAgain) {
|
| SchedulerSettings default_scheduler_settings;
|
| @@ -288,9 +413,11 @@ TEST(SchedulerStateMachineTest,
|
| EXPECT_TRUE(state.RedrawPending());
|
| }
|
|
|
| -TEST(SchedulerStateMachineTest,
|
| - TestFailedDrawsWillEventuallyForceADrawAfterTheNextCommit) {
|
| +void TestFailedDrawsEventuallyForceDrawAfterNextCommit(
|
| + bool main_frame_before_draw_enabled) {
|
| SchedulerSettings scheduler_settings;
|
| + scheduler_settings.main_frame_before_draw_enabled =
|
| + main_frame_before_draw_enabled;
|
| scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ = 1;
|
| StateMachine state(scheduler_settings);
|
| state.SetCanStart();
|
| @@ -333,12 +460,30 @@ TEST(SchedulerStateMachineTest,
|
|
|
| // The redraw should be forced at the end of the next BeginImplFrame.
|
| state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
|
| + if (main_frame_before_draw_enabled) {
|
| + EXPECT_ACTION_UPDATE_STATE(
|
| + SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
|
| + }
|
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
| state.OnBeginImplFrameDeadline();
|
| EXPECT_ACTION_UPDATE_STATE(
|
| SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED);
|
| }
|
|
|
| +TEST(SchedulerStateMachineTest,
|
| + TestFailedDrawsEventuallyForceDrawAfterNextCommit) {
|
| + bool main_frame_before_draw_enabled = false;
|
| + TestFailedDrawsEventuallyForceDrawAfterNextCommit(
|
| + main_frame_before_draw_enabled);
|
| +}
|
| +
|
| +TEST(SchedulerStateMachineTest,
|
| + TestFailedDrawsEventuallyForceDrawAfterNextCommit_CommitBeforeDraw) {
|
| + bool main_frame_before_draw_enabled = true;
|
| + TestFailedDrawsEventuallyForceDrawAfterNextCommit(
|
| + main_frame_before_draw_enabled);
|
| +}
|
| +
|
| TEST(SchedulerStateMachineTest, TestFailedDrawsDoNotRestartForcedDraw) {
|
| SchedulerSettings scheduler_settings;
|
| int draw_limit = 1;
|
| @@ -520,19 +665,14 @@ TEST(SchedulerStateMachineTest, TestNextActionDrawsOnBeginImplFrame) {
|
| }
|
| }
|
|
|
| - // When in BeginImplFrame deadline we should always draw for SetNeedsRedraw or
|
| - // SetNeedsForcedRedrawForReadback have been called... except if we're
|
| - // ready to commit, in which case we expect a commit first.
|
| + // When in BeginImplFrame deadline we should always draw for SetNeedsRedraw
|
| + // except if we're ready to commit, in which case we expect a commit first.
|
| + // SetNeedsForcedRedrawForReadback should take precedence over all and
|
| + // issue a readback.
|
| for (size_t i = 0; i < num_commit_states; ++i) {
|
| for (size_t j = 0; j < 2; ++j) {
|
| bool request_readback = j;
|
|
|
| - // Skip invalid states
|
| - if (request_readback &&
|
| - (SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW !=
|
| - all_commit_states[i]))
|
| - continue;
|
| -
|
| StateMachine state(default_scheduler_settings);
|
| state.SetCanStart();
|
| state.UpdateState(state.NextAction());
|
| @@ -549,15 +689,11 @@ TEST(SchedulerStateMachineTest, TestNextActionDrawsOnBeginImplFrame) {
|
| }
|
|
|
| SchedulerStateMachine::Action expected_action;
|
| - if (all_commit_states[i] ==
|
| - SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT) {
|
| + if (request_readback) {
|
| + expected_action = SchedulerStateMachine::ACTION_DRAW_AND_READBACK;
|
| + } else if (all_commit_states[i] ==
|
| + SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT) {
|
| expected_action = SchedulerStateMachine::ACTION_COMMIT;
|
| - } else if (request_readback) {
|
| - if (all_commit_states[i] ==
|
| - SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW)
|
| - expected_action = SchedulerStateMachine::ACTION_DRAW_AND_READBACK;
|
| - else
|
| - expected_action = SchedulerStateMachine::ACTION_NONE;
|
| } else {
|
| expected_action =
|
| SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE;
|
| @@ -566,13 +702,13 @@ TEST(SchedulerStateMachineTest, TestNextActionDrawsOnBeginImplFrame) {
|
| // Case 1: needs_commit=false.
|
| EXPECT_NE(state.BeginImplFrameNeeded(), request_readback)
|
| << *state.AsValue();
|
| - EXPECT_EQ(expected_action, state.NextAction()) << *state.AsValue();
|
| + EXPECT_EQ(state.NextAction(), expected_action) << *state.AsValue();
|
|
|
| // Case 2: needs_commit=true.
|
| state.SetNeedsCommit();
|
| EXPECT_NE(state.BeginImplFrameNeeded(), request_readback)
|
| << *state.AsValue();
|
| - EXPECT_EQ(expected_action, state.NextAction()) << *state.AsValue();
|
| + EXPECT_EQ(state.NextAction(), expected_action) << *state.AsValue();
|
| }
|
| }
|
| }
|
| @@ -643,8 +779,6 @@ TEST(SchedulerStateMachineTest,
|
| state.UpdateState(state.NextAction());
|
| state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
|
|
|
| - state.SetCommitState(
|
| - SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW);
|
| state.SetActiveTreeNeedsFirstDraw(true);
|
| state.SetNeedsCommit();
|
| state.SetNeedsRedraw(true);
|
| @@ -663,9 +797,11 @@ TEST(SchedulerStateMachineTest,
|
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
| }
|
|
|
| -TEST(SchedulerStateMachineTest, TestsetNeedsCommitIsNotLost) {
|
| - SchedulerSettings default_scheduler_settings;
|
| - StateMachine state(default_scheduler_settings);
|
| +void TestSetNeedsCommitIsNotLost(bool main_frame_before_draw_enabled) {
|
| + SchedulerSettings scheduler_settings;
|
| + scheduler_settings.main_frame_before_draw_enabled =
|
| + main_frame_before_draw_enabled;
|
| + StateMachine state(scheduler_settings);
|
| state.SetCanStart();
|
| state.UpdateState(state.NextAction());
|
| state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
|
| @@ -717,22 +853,38 @@ TEST(SchedulerStateMachineTest, TestsetNeedsCommitIsNotLost) {
|
| state.begin_impl_frame_state());
|
| EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction());
|
|
|
| - // Commit and make sure we draw on next BeginImplFrame
|
| + // Finish the commit, then make sure we start the next commit immediately
|
| + // and draw on the next BeginImplFrame.
|
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
|
| + if (main_frame_before_draw_enabled) {
|
| + EXPECT_ACTION_UPDATE_STATE(
|
| + SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
|
| + }
|
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
| +
|
| state.OnBeginImplFrameDeadline();
|
| - EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW,
|
| - state.CommitState());
|
| +
|
| + EXPECT_TRUE(state.active_tree_needs_first_draw());
|
| EXPECT_ACTION_UPDATE_STATE(
|
| SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
|
| state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS);
|
| -
|
| - // Verify that another commit will start immediately after draw.
|
| - EXPECT_ACTION_UPDATE_STATE(
|
| - SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
|
| + if (!main_frame_before_draw_enabled) {
|
| + EXPECT_ACTION_UPDATE_STATE(
|
| + SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
|
| + }
|
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
| }
|
|
|
| +TEST(SchedulerStateMachineTest, TestSetNeedsCommitIsNotLost) {
|
| + bool main_frame_before_draw_enabled = false;
|
| + TestSetNeedsCommitIsNotLost(main_frame_before_draw_enabled);
|
| +}
|
| +
|
| +TEST(SchedulerStateMachineTest, TestSetNeedsCommitIsNotLost_CommitBeforeDraw) {
|
| + bool main_frame_before_draw_enabled = true;
|
| + TestSetNeedsCommitIsNotLost(main_frame_before_draw_enabled);
|
| +}
|
| +
|
| TEST(SchedulerStateMachineTest, TestFullCycle) {
|
| SchedulerSettings default_scheduler_settings;
|
| StateMachine state(default_scheduler_settings);
|
| @@ -762,8 +914,7 @@ TEST(SchedulerStateMachineTest, TestFullCycle) {
|
|
|
| // Commit.
|
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
|
| - EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW,
|
| - state.CommitState());
|
| + EXPECT_TRUE(state.active_tree_needs_first_draw());
|
| EXPECT_TRUE(state.needs_redraw());
|
|
|
| // Expect to do nothing until BeginImplFrame deadline
|
| @@ -814,8 +965,7 @@ TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) {
|
|
|
| // First commit.
|
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
|
| - EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW,
|
| - state.CommitState());
|
| + EXPECT_TRUE(state.active_tree_needs_first_draw());
|
| EXPECT_TRUE(state.needs_redraw());
|
|
|
| // Expect to do nothing until BeginImplFrame deadline.
|
| @@ -1105,8 +1255,7 @@ TEST(SchedulerStateMachineTest, TestContextLostWhileCommitInProgress) {
|
|
|
| // We will abort the draw when the output surface is lost if we are
|
| // waiting for the first draw to unblock the main thread.
|
| - EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW,
|
| - state.CommitState());
|
| + EXPECT_TRUE(state.active_tree_needs_first_draw());
|
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT);
|
|
|
| // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE
|
| @@ -1168,8 +1317,7 @@ TEST(SchedulerStateMachineTest,
|
| state.NotifyBeginMainFrameStarted();
|
| state.NotifyReadyToCommit();
|
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
|
| - EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW,
|
| - state.CommitState());
|
| + EXPECT_TRUE(state.active_tree_needs_first_draw());
|
|
|
| // Because the output surface is missing, we expect the draw to abort.
|
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT);
|
| @@ -1228,8 +1376,6 @@ TEST(SchedulerStateMachineTest, TestFinishAllRenderingWhileContextLost) {
|
| state.DidLoseOutputSurface();
|
|
|
| // Ask a forced redraw for readback and verify it ocurrs.
|
| - state.SetCommitState(
|
| - SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW);
|
| state.SetNeedsForcedRedrawForReadback();
|
| state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
|
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK);
|
| @@ -1257,8 +1403,6 @@ TEST(SchedulerStateMachineTest, TestFinishAllRenderingWhileContextLost) {
|
| SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION);
|
|
|
| // Ask a readback and verify it occurs.
|
| - state.SetCommitState(
|
| - SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW);
|
| state.SetNeedsForcedRedrawForReadback();
|
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK);
|
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
|
| @@ -1401,8 +1545,7 @@ TEST(SchedulerStateMachineTest, TestFinishCommitWhenCommitInProgress) {
|
| EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction());
|
| state.UpdateState(state.NextAction());
|
|
|
| - EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW,
|
| - state.CommitState());
|
| + EXPECT_TRUE(state.active_tree_needs_first_draw());
|
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT);
|
| }
|
|
|
| @@ -1422,8 +1565,7 @@ TEST(SchedulerStateMachineTest, TestFinishCommitWhenForcedCommitInProgress) {
|
| state.NotifyReadyToCommit();
|
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
|
|
|
| - EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW,
|
| - state.CommitState());
|
| + EXPECT_TRUE(state.active_tree_needs_first_draw());
|
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK);
|
|
|
| // When the readback interrupts the normal commit, we should not get
|
| @@ -1494,8 +1636,7 @@ TEST(SchedulerStateMachineTest, TestImmediateFinishCommit) {
|
| state.CommitState());
|
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
|
|
|
| - EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW,
|
| - state.CommitState());
|
| + EXPECT_TRUE(state.active_tree_needs_first_draw());
|
|
|
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK);
|
| state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS);
|
| @@ -1531,8 +1672,7 @@ TEST(SchedulerStateMachineTest, TestImmediateFinishCommitDuringCommit) {
|
| state.CommitState());
|
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
|
|
|
| - EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW,
|
| - state.CommitState());
|
| + EXPECT_TRUE(state.active_tree_needs_first_draw());
|
|
|
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK);
|
| state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS);
|
| @@ -1566,8 +1706,7 @@ TEST(SchedulerStateMachineTest, ImmediateBeginMainFrameAbortedWhileInvisible) {
|
| state.CommitState());
|
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
|
|
|
| - EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW,
|
| - state.CommitState());
|
| + EXPECT_TRUE(state.active_tree_needs_first_draw());
|
|
|
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK);
|
| state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS);
|
| @@ -1608,8 +1747,7 @@ TEST(SchedulerStateMachineTest, ImmediateFinishCommitWhileCantDraw) {
|
| state.CommitState());
|
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
|
|
|
| - EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW,
|
| - state.CommitState());
|
| + EXPECT_TRUE(state.active_tree_needs_first_draw());
|
|
|
| EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK);
|
| state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS);
|
|
|