diff options
Diffstat (limited to 'cc')
-rw-r--r-- | cc/scheduler/scheduler_state_machine.cc | 4 | ||||
-rw-r--r-- | cc/scheduler/scheduler_state_machine_unittest.cc | 16 |
2 files changed, 18 insertions, 2 deletions
diff --git a/cc/scheduler/scheduler_state_machine.cc b/cc/scheduler/scheduler_state_machine.cc index 44ab643..3ed18f6 100644 --- a/cc/scheduler/scheduler_state_machine.cc +++ b/cc/scheduler/scheduler_state_machine.cc @@ -784,8 +784,10 @@ void SchedulerStateMachine::UpdateStateOnDraw(bool did_request_swap) { forced_redraw_state_ = FORCED_REDRAW_STATE_IDLE; } - if (commit_state_ == COMMIT_STATE_WAITING_FOR_FIRST_DRAW) + if (!has_pending_tree_ && + commit_state_ == COMMIT_STATE_WAITING_FOR_FIRST_DRAW) { commit_state_ = COMMIT_STATE_IDLE; + } needs_redraw_ = false; active_tree_needs_first_draw_ = false; diff --git a/cc/scheduler/scheduler_state_machine_unittest.cc b/cc/scheduler/scheduler_state_machine_unittest.cc index 3dfe934..067f019 100644 --- a/cc/scheduler/scheduler_state_machine_unittest.cc +++ b/cc/scheduler/scheduler_state_machine_unittest.cc @@ -226,18 +226,32 @@ TEST(SchedulerStateMachineTest, MainFrameBeforeDrawDisabled) { state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); + // Make sure that a draw of the active tree doesn't spuriously advance + // the commit state and unblock the next commit. + state.SetNeedsRedraw(true); + state.OnBeginImplFrameDeadline(); + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); + EXPECT_ACTION_UPDATE_STATE( + SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); + EXPECT_EQ(state.CommitState(), + SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW); + EXPECT_TRUE(state.has_pending_tree()); + // Verify NotifyReadyToActivate unblocks activation, draw, and // commit in that order. + state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); + state.NotifyReadyToActivate(); EXPECT_ACTION_UPDATE_STATE( SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE); + EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 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_ANIMATE); EXPECT_ACTION_UPDATE_STATE( SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); EXPECT_EQ(state.CommitState(), SchedulerStateMachine::COMMIT_STATE_IDLE); |