diff options
author | epenner@chromium.org <epenner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-07 04:32:14 +0000 |
---|---|---|
committer | epenner@chromium.org <epenner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-07 04:32:14 +0000 |
commit | 1e212c9bbd9f750af687171ad64e0d4a17004d47 (patch) | |
tree | 84f1be2bc9eeb0dfb9c6b7052fa6b9f0f47495a8 /cc/scheduler | |
parent | 306b92072c17b06051ff98f187620c654a61157f (diff) | |
download | chromium_src-1e212c9bbd9f750af687171ad64e0d4a17004d47.zip chromium_src-1e212c9bbd9f750af687171ad64e0d4a17004d47.tar.gz chromium_src-1e212c9bbd9f750af687171ad64e0d4a17004d47.tar.bz2 |
CC: Fix missing swap-used-incomplete-tile updates
When we early-out of a frame that has no damage, we didn't
correctly detect if the frame had incomplete tiles. This
patch only updates the flag if a swap actually occurs.
To prevent this kind of bug in the future, this patch
always sets the did-swap-use-incomplete-tile flag when it is
known, rather than resetting it to false in one place and
hoping it will always be set again correctly in all cases.
The test times-out without this patch.
BUG=284810
Review URL: https://chromiumcodereview.appspot.com/23686011
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@221891 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc/scheduler')
-rw-r--r-- | cc/scheduler/scheduler.cc | 4 | ||||
-rw-r--r-- | cc/scheduler/scheduler.h | 2 | ||||
-rw-r--r-- | cc/scheduler/scheduler_state_machine.cc | 9 | ||||
-rw-r--r-- | cc/scheduler/scheduler_state_machine.h | 4 |
4 files changed, 9 insertions, 10 deletions
diff --git a/cc/scheduler/scheduler.cc b/cc/scheduler/scheduler.cc index 5fd5a99..d3e7aa5 100644 --- a/cc/scheduler/scheduler.cc +++ b/cc/scheduler/scheduler.cc @@ -65,8 +65,8 @@ void Scheduler::SetNeedsRedraw() { ProcessScheduledActions(); } -void Scheduler::DidSwapUseIncompleteTile() { - state_machine_.DidSwapUseIncompleteTile(); +void Scheduler::SetSwapUsedIncompleteTile(bool used_incomplete_tile) { + state_machine_.SetSwapUsedIncompleteTile(used_incomplete_tile); ProcessScheduledActions(); } diff --git a/cc/scheduler/scheduler.h b/cc/scheduler/scheduler.h index c573af7..063872b 100644 --- a/cc/scheduler/scheduler.h +++ b/cc/scheduler/scheduler.h @@ -77,7 +77,7 @@ class CC_EXPORT Scheduler { void SetMainThreadNeedsLayerTextures(); - void DidSwapUseIncompleteTile(); + void SetSwapUsedIncompleteTile(bool used_incomplete_tile); void FinishCommit(); void BeginFrameAbortedByMainThread(bool did_handle); diff --git a/cc/scheduler/scheduler_state_machine.cc b/cc/scheduler/scheduler_state_machine.cc index e93d0c8..a608fb9 100644 --- a/cc/scheduler/scheduler_state_machine.cc +++ b/cc/scheduler/scheduler_state_machine.cc @@ -673,10 +673,8 @@ void SchedulerStateMachine::UpdateStateOnDraw(bool did_swap) { draw_if_possible_failed_ = false; active_tree_needs_first_draw_ = false; - if (did_swap) { - swap_used_incomplete_tile_ = false; + if (did_swap) last_frame_number_swap_performed_ = current_frame_number_; - } } void SchedulerStateMachine::SetMainThreadNeedsLayerTextures() { @@ -759,8 +757,9 @@ void SchedulerStateMachine::SetVisible(bool visible) { visible_ = visible; } void SchedulerStateMachine::SetNeedsRedraw() { needs_redraw_ = true; } -void SchedulerStateMachine::DidSwapUseIncompleteTile() { - swap_used_incomplete_tile_ = true; +void SchedulerStateMachine::SetSwapUsedIncompleteTile( + bool used_incomplete_tile) { + swap_used_incomplete_tile_ = used_incomplete_tile; } void SchedulerStateMachine::DidDrawIfPossibleCompleted(bool success) { diff --git a/cc/scheduler/scheduler_state_machine.h b/cc/scheduler/scheduler_state_machine.h index d69f70d..aaefa37 100644 --- a/cc/scheduler/scheduler_state_machine.h +++ b/cc/scheduler/scheduler_state_machine.h @@ -128,9 +128,9 @@ class CC_EXPORT SchedulerStateMachine { // or the screen being damaged and simply needing redisplay. void SetNeedsRedraw(); - // Indicates that a redraw is required because we are currently rendering + // Indicates whether a redraw is required because we are currently rendering // with a low resolution or checkerboarded tile. - void DidSwapUseIncompleteTile(); + void SetSwapUsedIncompleteTile(bool used_incomplete_tile); // Indicates whether ACTION_DRAW_AND_SWAP_IF_POSSIBLE drew to the screen or // not. |