summaryrefslogtreecommitdiffstats
path: root/cc
diff options
context:
space:
mode:
authorbrianderson@chromium.org <brianderson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-07 13:41:53 +0000
committerbrianderson@chromium.org <brianderson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-07 13:41:53 +0000
commite8832bece704e3b2dd501bb48eca0a28a8286105 (patch)
tree2ab3272566c9841980e0760e366dcac6f7979a94 /cc
parent81e09e733853a001657e3a6ffd47aebaa458917f (diff)
downloadchromium_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.cc4
-rw-r--r--cc/scheduler/scheduler_state_machine_unittest.cc16
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);