Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(284)

Side by Side Diff: cc/trees/layer_tree_host_unittest_animation.cc

Issue 16871016: cc: Use BeginFrameArgs (Closed) Base URL: http://git.chromium.org/chromium/src.git@bfargs2
Patch Set: Allow back2back readbacks Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/trees/layer_tree_host.h" 5 #include "cc/trees/layer_tree_host.h"
6 6
7 #include "cc/animation/animation_curve.h" 7 #include "cc/animation/animation_curve.h"
8 #include "cc/animation/layer_animation_controller.h" 8 #include "cc/animation/layer_animation_controller.h"
9 #include "cc/animation/timing_function.h" 9 #include "cc/animation/timing_function.h"
10 #include "cc/layers/layer.h" 10 #include "cc/layers/layer.h"
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
257 class LayerTreeHostAnimationTestTickAnimationWhileBackgrounded 257 class LayerTreeHostAnimationTestTickAnimationWhileBackgrounded
258 : public LayerTreeHostAnimationTest { 258 : public LayerTreeHostAnimationTest {
259 public: 259 public:
260 LayerTreeHostAnimationTestTickAnimationWhileBackgrounded() 260 LayerTreeHostAnimationTestTickAnimationWhileBackgrounded()
261 : num_animates_(0) {} 261 : num_animates_(0) {}
262 262
263 virtual void BeginTest() OVERRIDE { 263 virtual void BeginTest() OVERRIDE {
264 PostAddAnimationToMainThread(layer_tree_host()->root_layer()); 264 PostAddAnimationToMainThread(layer_tree_host()->root_layer());
265 } 265 }
266 266
267 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
268 if (num_animates_ == 1)
269 PostSetVisibleToMainThread(false);
270 }
271
267 // Use WillAnimateLayers to set visible false before the animation runs and 272 // Use WillAnimateLayers to set visible false before the animation runs and
268 // causes a commit, so we block the second visible animate in single-thread 273 // causes a commit, so we block the second visible animate in single-thread
269 // mode. 274 // mode.
270 virtual void WillAnimateLayers( 275 virtual void WillAnimateLayers(
271 LayerTreeHostImpl* host_impl, 276 LayerTreeHostImpl* host_impl,
272 base::TimeTicks monotonic_time) OVERRIDE { 277 base::TimeTicks monotonic_time) OVERRIDE {
273 if (num_animates_ < 2) { 278 if (num_animates_ < 3) {
274 if (!num_animates_) {
275 // We have a long animation running. It should continue to tick even
276 // if we are not visible.
277 PostSetVisibleToMainThread(false);
278 }
279 num_animates_++; 279 num_animates_++;
280 return; 280 return;
281 } 281 }
282 EndTest(); 282 EndTest();
283 } 283 }
284 284
285 virtual void AfterTest() OVERRIDE {} 285 virtual void AfterTest() OVERRIDE {}
286 286
287 private: 287 private:
288 int num_animates_; 288 int num_animates_;
(...skipping 15 matching lines...) Expand all
304 layer_tree_host()->root_layer()->AddChild(content_); 304 layer_tree_host()->root_layer()->AddChild(content_);
305 } 305 }
306 306
307 virtual void BeginTest() OVERRIDE { 307 virtual void BeginTest() OVERRIDE {
308 PostAddAnimationToMainThread(content_.get()); 308 PostAddAnimationToMainThread(content_.get());
309 } 309 }
310 310
311 virtual void AnimateLayers( 311 virtual void AnimateLayers(
312 LayerTreeHostImpl* host_impl, 312 LayerTreeHostImpl* host_impl,
313 base::TimeTicks monotonic_time) OVERRIDE { 313 base::TimeTicks monotonic_time) OVERRIDE {
314 if (!host_impl->active_tree()->root_layer())
315 return;
314 LayerAnimationController* controller_impl = 316 LayerAnimationController* controller_impl =
315 host_impl->active_tree()->root_layer()->children()[0]-> 317 host_impl->active_tree()->root_layer()->children()[0]->
316 layer_animation_controller(); 318 layer_animation_controller();
317 Animation* animation = 319 Animation* animation =
318 controller_impl->GetAnimation(Animation::Opacity); 320 controller_impl->GetAnimation(Animation::Opacity);
319 if (!animation) 321 if (!animation)
320 return; 322 return;
321 323
322 const FloatAnimationCurve* curve = 324 const FloatAnimationCurve* curve =
323 animation->curve()->ToFloatAnimationCurve(); 325 animation->curve()->ToFloatAnimationCurve();
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 main_start_time_ = animation->start_time(); 375 main_start_time_ = animation->start_time();
374 controller->RemoveAnimation(animation->id()); 376 controller->RemoveAnimation(animation->id());
375 377
376 if (impl_start_time_ > 0.0) 378 if (impl_start_time_ > 0.0)
377 EndTest(); 379 EndTest();
378 } 380 }
379 381
380 virtual void UpdateAnimationState( 382 virtual void UpdateAnimationState(
381 LayerTreeHostImpl* impl_host, 383 LayerTreeHostImpl* impl_host,
382 bool has_unfinished_animation) OVERRIDE { 384 bool has_unfinished_animation) OVERRIDE {
385 if (!impl_host->active_tree()->root_layer())
386 return;
387
383 LayerAnimationController* controller = 388 LayerAnimationController* controller =
384 impl_host->active_tree()->root_layer()->children()[0]-> 389 impl_host->active_tree()->root_layer()->children()[0]->
385 layer_animation_controller(); 390 layer_animation_controller();
386 Animation* animation = 391 Animation* animation =
387 controller->GetAnimation(Animation::Opacity); 392 controller->GetAnimation(Animation::Opacity);
388 if (!animation) 393 if (!animation)
389 return; 394 return;
390 395
391 impl_start_time_ = animation->start_time(); 396 impl_start_time_ = animation->start_time();
392 controller->RemoveAnimation(animation->id()); 397 controller->RemoveAnimation(animation->id());
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after
734 virtual void DispatchAddInstantAnimation(Layer* layer_to_receive_animation) 739 virtual void DispatchAddInstantAnimation(Layer* layer_to_receive_animation)
735 OVERRIDE { 740 OVERRIDE {
736 LayerTreeHostAnimationTest::DispatchAddInstantAnimation( 741 LayerTreeHostAnimationTest::DispatchAddInstantAnimation(
737 layer_to_receive_animation); 742 layer_to_receive_animation);
738 added_animations_++; 743 added_animations_++;
739 } 744 }
740 745
741 virtual bool PrepareToDrawOnThread(LayerTreeHostImpl* host_impl, 746 virtual bool PrepareToDrawOnThread(LayerTreeHostImpl* host_impl,
742 LayerTreeHostImpl::FrameData* frame_data, 747 LayerTreeHostImpl::FrameData* frame_data,
743 bool result) OVERRIDE { 748 bool result) OVERRIDE {
744 if (added_animations_ < 2) 749 if (host_impl->active_tree()->source_frame_number() < 2)
745 return result; 750 return result;
746 if (TestEnded()) 751 if (TestEnded())
747 return result; 752 return result;
748 // Act like there is checkerboard when the second animation wants to draw. 753 // Act like there is checkerboard when the second animation wants to draw.
749 ++prevented_draw_; 754 ++prevented_draw_;
755 if (finished_times_)
756 EndTest();
750 return false; 757 return false;
751 } 758 }
752 759
753 virtual void DidCommitAndDrawFrame() OVERRIDE { 760 virtual void DidCommit() OVERRIDE {
754 switch (layer_tree_host()->source_frame_number()) { 761 switch (layer_tree_host()->source_frame_number()) {
755 case 1: 762 case 1:
756 // The animation is longer than 1 BeginFrame interval. 763 // The animation is longer than 1 BeginFrame interval.
757 AddOpacityTransitionToLayer(content_.get(), 0.1, 0.2f, 0.8f, false); 764 AddOpacityTransitionToLayer(content_.get(), 0.1, 0.2f, 0.8f, false);
758 added_animations_++; 765 added_animations_++;
759 break; 766 break;
760 case 2: 767 case 2:
761 // This second animation will not be drawn so it should not start. 768 // This second animation will not be drawn so it should not start.
762 AddAnimatedTransformToLayer(content_.get(), 0.1, 5, 5); 769 AddAnimatedTransformToLayer(content_.get(), 0.1, 5, 5);
763 added_animations_++; 770 added_animations_++;
764 break; 771 break;
765 } 772 }
766 } 773 }
767 774
768 virtual void NotifyAnimationStarted(double wall_clock_time) OVERRIDE { 775 virtual void NotifyAnimationStarted(double wall_clock_time) OVERRIDE {
769 if (TestEnded()) 776 if (TestEnded())
770 return; 777 return;
771 started_times_++; 778 started_times_++;
772 } 779 }
773 780
774 virtual void NotifyAnimationFinished(double wall_clock_time) OVERRIDE { 781 virtual void NotifyAnimationFinished(double wall_clock_time) OVERRIDE {
775 // We should be checkerboarding already, but it should still finish the 782 // We should be checkerboarding already, but it should still finish the
776 // first animation. 783 // first animation.
777 EXPECT_EQ(2, added_animations_);
778 finished_times_++; 784 finished_times_++;
779 EndTest(); 785 if (prevented_draw_)
786 EndTest();
780 } 787 }
781 788
782 virtual void AfterTest() OVERRIDE { 789 virtual void AfterTest() OVERRIDE {
783 // Make sure we tried to draw the second animation but failed. 790 // Make sure we tried to draw the second animation but failed.
784 EXPECT_LT(0, prevented_draw_); 791 EXPECT_LT(0, prevented_draw_);
785 // The first animation should be started, but the second should not because 792 // The first animation should be started, but the second should not because
786 // of checkerboard. 793 // of checkerboard.
787 EXPECT_EQ(1, started_times_); 794 EXPECT_EQ(1, started_times_);
788 // The first animation should still be finished. 795 // The first animation should still be finished.
789 EXPECT_EQ(1, finished_times_); 796 EXPECT_EQ(1, finished_times_);
790 } 797 }
791 798
792 int prevented_draw_; 799 int prevented_draw_;
793 int added_animations_; 800 int added_animations_;
794 int started_times_; 801 int started_times_;
795 int finished_times_; 802 int finished_times_;
796 FakeContentLayerClient client_; 803 FakeContentLayerClient client_;
797 scoped_refptr<FakeContentLayer> content_; 804 scoped_refptr<FakeContentLayer> content_;
798 }; 805 };
799 806
800 MULTI_THREAD_TEST_F( 807 MULTI_THREAD_TEST_F(
801 LayerTreeHostAnimationTestCheckerboardDoesntStartAnimations); 808 LayerTreeHostAnimationTestCheckerboardDoesntStartAnimations);
802 809
803 } // namespace 810 } // namespace
804 } // namespace cc 811 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698