summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordanakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-09 04:37:35 +0000
committerdanakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-09 04:37:35 +0000
commit545dd721cf28954ed59981d36b662e503b23c97b (patch)
tree264465bebfef80f82cb09517b8947fc20b7a8c53
parent16dc4245870d40d56dbcfbc05ad2c0cc1a1001e0 (diff)
downloadchromium_src-545dd721cf28954ed59981d36b662e503b23c97b.zip
chromium_src-545dd721cf28954ed59981d36b662e503b23c97b.tar.gz
chromium_src-545dd721cf28954ed59981d36b662e503b23c97b.tar.bz2
cc: Prevent checkerboarded animations from timing out during tests.
During tests that verify behaviour with checkerboarding, we need preductable behaviour. Currently if the test takes too long and the compositor thread ticks too many times, the checkerboarded animation will time out and animate+draw. This is unpredictable flaky behaviour for the tests. So add a setting to disable this timeout-and-draw behaviour in the scheduler. R=jamesr BUG=228998 Review URL: https://chromiumcodereview.appspot.com/13577005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@193006 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--cc/scheduler/scheduler_settings.cc4
-rw-r--r--cc/scheduler/scheduler_settings.h1
-rw-r--r--cc/scheduler/scheduler_state_machine.cc3
-rw-r--r--cc/trees/layer_tree_host_unittest_animation.cc6
-rw-r--r--cc/trees/layer_tree_settings.cc1
-rw-r--r--cc/trees/layer_tree_settings.h1
-rw-r--r--cc/trees/thread_proxy.cc6
7 files changed, 18 insertions, 4 deletions
diff --git a/cc/scheduler/scheduler_settings.cc b/cc/scheduler/scheduler_settings.cc
index 7c37276..29c525b 100644
--- a/cc/scheduler/scheduler_settings.cc
+++ b/cc/scheduler/scheduler_settings.cc
@@ -6,7 +6,9 @@
namespace cc {
-SchedulerSettings::SchedulerSettings() : impl_side_painting(false) {}
+SchedulerSettings::SchedulerSettings()
+ : impl_side_painting(false),
+ timeout_and_draw_when_animation_checkerboards(true) {}
SchedulerSettings::~SchedulerSettings() {}
diff --git a/cc/scheduler/scheduler_settings.h b/cc/scheduler/scheduler_settings.h
index d96b5a6..ebcfc6a 100644
--- a/cc/scheduler/scheduler_settings.h
+++ b/cc/scheduler/scheduler_settings.h
@@ -15,6 +15,7 @@ class CC_EXPORT SchedulerSettings {
~SchedulerSettings();
bool impl_side_painting;
+ bool timeout_and_draw_when_animation_checkerboards;
};
} // namespace cc
diff --git a/cc/scheduler/scheduler_state_machine.cc b/cc/scheduler/scheduler_state_machine.cc
index ce2742b..c55631d 100644
--- a/cc/scheduler/scheduler_state_machine.cc
+++ b/cc/scheduler/scheduler_state_machine.cc
@@ -370,7 +370,8 @@ void SchedulerStateMachine::DidDrawIfPossibleCompleted(bool success) {
needs_redraw_ = true;
needs_commit_ = true;
consecutive_failed_draws_++;
- if (consecutive_failed_draws_ >=
+ if (settings_.timeout_and_draw_when_animation_checkerboards &&
+ consecutive_failed_draws_ >=
maximum_number_of_failed_draws_before_draw_is_forced_) {
consecutive_failed_draws_ = 0;
// We need to force a draw, but it doesn't make sense to do this until
diff --git a/cc/trees/layer_tree_host_unittest_animation.cc b/cc/trees/layer_tree_host_unittest_animation.cc
index 2e04acc..0197051 100644
--- a/cc/trees/layer_tree_host_unittest_animation.cc
+++ b/cc/trees/layer_tree_host_unittest_animation.cc
@@ -687,6 +687,12 @@ class LayerTreeHostAnimationTestCheckerboardDoesntStartAnimations
layer_tree_host()->root_layer()->AddChild(content_);
}
+ virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+ // Make sure that drawing many times doesn't cause a checkerboarded
+ // animation to start so we avoid flake in this test.
+ settings->timeout_and_draw_when_animation_checkerboards = false;
+ }
+
virtual void BeginTest() OVERRIDE {
added_animations_ = 0;
started_times_ = 0;
diff --git a/cc/trees/layer_tree_settings.cc b/cc/trees/layer_tree_settings.cc
index 51a2132..a8df59a 100644
--- a/cc/trees/layer_tree_settings.cc
+++ b/cc/trees/layer_tree_settings.cc
@@ -36,6 +36,7 @@ LayerTreeSettings::LayerTreeSettings()
use_color_estimator(false),
use_memory_management(true),
prediction_benchmarking(false),
+ timeout_and_draw_when_animation_checkerboards(true),
minimum_contents_scale(0.0625f),
low_res_contents_scale_factor(0.125f),
top_controls_height(0.f),
diff --git a/cc/trees/layer_tree_settings.h b/cc/trees/layer_tree_settings.h
index d1f8e3c..e3ee11b 100644
--- a/cc/trees/layer_tree_settings.h
+++ b/cc/trees/layer_tree_settings.h
@@ -41,6 +41,7 @@ class CC_EXPORT LayerTreeSettings {
bool use_color_estimator;
bool use_memory_management;
bool prediction_benchmarking;
+ bool timeout_and_draw_when_animation_checkerboards;
float minimum_contents_scale;
float low_res_contents_scale_factor;
float top_controls_height;
diff --git a/cc/trees/thread_proxy.cc b/cc/trees/thread_proxy.cc
index f824c9b..237d2ac 100644
--- a/cc/trees/thread_proxy.cc
+++ b/cc/trees/thread_proxy.cc
@@ -1095,9 +1095,11 @@ void ThreadProxy::InitializeImplOnImplThread(CompletionEvent* completion,
} else {
frame_rate_controller.reset(new FrameRateController(Proxy::ImplThread()));
}
+ const LayerTreeSettings& settings = layer_tree_host_->settings();
SchedulerSettings scheduler_settings;
- scheduler_settings.impl_side_painting =
- layer_tree_host_->settings().impl_side_painting;
+ scheduler_settings.impl_side_painting = settings.impl_side_painting;
+ scheduler_settings.timeout_and_draw_when_animation_checkerboards =
+ settings.timeout_and_draw_when_animation_checkerboards;
scheduler_on_impl_thread_ = Scheduler::Create(this,
frame_rate_controller.Pass(),
scheduler_settings);