summaryrefslogtreecommitdiffstats
path: root/cc/scheduler
diff options
context:
space:
mode:
authorepenner@chromium.org <epenner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-09-07 04:32:14 +0000
committerepenner@chromium.org <epenner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-09-07 04:32:14 +0000
commit1e212c9bbd9f750af687171ad64e0d4a17004d47 (patch)
tree84f1be2bc9eeb0dfb9c6b7052fa6b9f0f47495a8 /cc/scheduler
parent306b92072c17b06051ff98f187620c654a61157f (diff)
downloadchromium_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.cc4
-rw-r--r--cc/scheduler/scheduler.h2
-rw-r--r--cc/scheduler/scheduler_state_machine.cc9
-rw-r--r--cc/scheduler/scheduler_state_machine.h4
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.