diff options
author | danakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-09 04:37:35 +0000 |
---|---|---|
committer | danakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-09 04:37:35 +0000 |
commit | 545dd721cf28954ed59981d36b662e503b23c97b (patch) | |
tree | 264465bebfef80f82cb09517b8947fc20b7a8c53 | |
parent | 16dc4245870d40d56dbcfbc05ad2c0cc1a1001e0 (diff) | |
download | chromium_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.cc | 4 | ||||
-rw-r--r-- | cc/scheduler/scheduler_settings.h | 1 | ||||
-rw-r--r-- | cc/scheduler/scheduler_state_machine.cc | 3 | ||||
-rw-r--r-- | cc/trees/layer_tree_host_unittest_animation.cc | 6 | ||||
-rw-r--r-- | cc/trees/layer_tree_settings.cc | 1 | ||||
-rw-r--r-- | cc/trees/layer_tree_settings.h | 1 | ||||
-rw-r--r-- | cc/trees/thread_proxy.cc | 6 |
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); |