diff options
author | brianderson@chromium.org <brianderson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-05-07 13:41:53 +0000 |
---|---|---|
committer | brianderson@chromium.org <brianderson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-05-07 13:41:53 +0000 |
commit | e8832bece704e3b2dd501bb48eca0a28a8286105 (patch) | |
tree | 2ab3272566c9841980e0760e366dcac6f7979a94 /cc | |
parent | 81e09e733853a001657e3a6ffd47aebaa458917f (diff) | |
download | chromium_src-e8832bece704e3b2dd501bb48eca0a28a8286105.zip chromium_src-e8832bece704e3b2dd501bb48eca0a28a8286105.tar.gz chromium_src-e8832bece704e3b2dd501bb48eca0a28a8286105.tar.bz2 |
cc: Check for pending tree before transition to COMMIT_STATE_IDLE
BUG=369648
Review URL: https://codereview.chromium.org/267943002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@268729 0039d316-1c4b-4281-b951-d872f2087c98
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); |