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

Unified Diff: cc/animation/layer_animation_controller_unittest.cc

Issue 73343002: De-activate LayerAnimationControllers when all animations are WaitingForDeletion (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix TickAnimationWhileBackgrounded flake Created 7 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: cc/animation/layer_animation_controller_unittest.cc
diff --git a/cc/animation/layer_animation_controller_unittest.cc b/cc/animation/layer_animation_controller_unittest.cc
index c3387f489709468371f55713c96f782c2a788e61..12c1787d97f0a7098e8d9e52a3307c6f15cbed5e 100644
--- a/cc/animation/layer_animation_controller_unittest.cc
+++ b/cc/animation/layer_animation_controller_unittest.cc
@@ -7,6 +7,7 @@
#include "cc/animation/animation.h"
#include "cc/animation/animation_curve.h"
#include "cc/animation/animation_delegate.h"
+#include "cc/animation/animation_registrar.h"
#include "cc/animation/keyframed_animation_curve.h"
#include "cc/animation/transform_operations.h"
#include "cc/test/animation_test_common.h"
@@ -92,6 +93,87 @@ TEST(LayerAnimationControllerTest, DoNotClobberStartTimes) {
Animation::Opacity)->start_time());
}
+// Tests that controllers activate and deactivate as expected.
+TEST(LayerAnimationControllerTest, Activation) {
+ scoped_ptr<AnimationRegistrar> registrar = AnimationRegistrar::Create();
+ scoped_ptr<AnimationRegistrar> registrar_impl = AnimationRegistrar::Create();
+
+ FakeLayerAnimationValueObserver dummy_impl;
+ scoped_refptr<LayerAnimationController> controller_impl(
+ LayerAnimationController::Create(0));
+ controller_impl->AddValueObserver(&dummy_impl);
+ FakeLayerAnimationValueObserver dummy;
+ scoped_refptr<LayerAnimationController> controller(
+ LayerAnimationController::Create(0));
+ controller->AddValueObserver(&dummy);
+ scoped_ptr<AnimationEventsVector> events(
+ make_scoped_ptr(new AnimationEventsVector));
+
+ controller->SetAnimationRegistrar(registrar.get());
+ controller_impl->SetAnimationRegistrar(registrar_impl.get());
+ EXPECT_EQ(1u, registrar->all_animation_controllers().size());
+ EXPECT_EQ(1u, registrar_impl->all_animation_controllers().size());
+
+ // Initially, both controllers should be inactive.
+ EXPECT_EQ(0u, registrar->active_animation_controllers().size());
+ EXPECT_EQ(0u, registrar_impl->active_animation_controllers().size());
+
+ AddOpacityTransitionToController(controller.get(), 1, 0, 1, false);
+ // The main thread controller should now be active.
+ EXPECT_EQ(1u, registrar->active_animation_controllers().size());
+
+ controller->PushAnimationUpdatesTo(controller_impl.get());
+ // Both controllers should now be active.
+ EXPECT_EQ(1u, registrar->active_animation_controllers().size());
+ EXPECT_EQ(1u, registrar_impl->active_animation_controllers().size());
+
+ controller_impl->Animate(1.0);
+ controller_impl->UpdateState(true, events.get());
+ EXPECT_EQ(1u, events->size());
+ controller->NotifyAnimationStarted((*events)[0], 0.0);
+
+ EXPECT_EQ(1u, registrar->active_animation_controllers().size());
+ EXPECT_EQ(1u, registrar_impl->active_animation_controllers().size());
+
+ controller->Animate(1.5);
+ controller->UpdateState(true, NULL);
+ EXPECT_EQ(1u, registrar->active_animation_controllers().size());
+
+ controller->Animate(2.0);
+ controller->UpdateState(true, NULL);
+ EXPECT_EQ(Animation::Finished,
+ controller->GetAnimation(Animation::Opacity)->run_state());
+ EXPECT_EQ(1u, registrar->active_animation_controllers().size());
+
+ events.reset(new AnimationEventsVector);
+ controller_impl->Animate(2.5);
+ controller_impl->UpdateState(true, events.get());
+
+ EXPECT_EQ(Animation::WaitingForDeletion,
+ controller_impl->GetAnimation(Animation::Opacity)->run_state());
+ // The impl thread controller should have de-activated.
+ EXPECT_EQ(0u, registrar_impl->active_animation_controllers().size());
+
+ EXPECT_EQ(1u, events->size());
+ controller->NotifyAnimationFinished((*events)[0], 0.0);
+ controller->Animate(2.5);
+ controller->UpdateState(true, NULL);
+
+ EXPECT_EQ(Animation::WaitingForDeletion,
+ controller->GetAnimation(Animation::Opacity)->run_state());
+ // The main thread controller should have de-activated.
+ EXPECT_EQ(0u, registrar->active_animation_controllers().size());
+
+ controller->PushAnimationUpdatesTo(controller_impl.get());
+ EXPECT_FALSE(controller->has_any_animation());
+ EXPECT_FALSE(controller_impl->has_any_animation());
+ EXPECT_EQ(0u, registrar->active_animation_controllers().size());
+ EXPECT_EQ(0u, registrar_impl->active_animation_controllers().size());
+
+ controller->SetAnimationRegistrar(NULL);
+ controller_impl->SetAnimationRegistrar(NULL);
+}
+
TEST(LayerAnimationControllerTest, SyncPause) {
FakeLayerAnimationValueObserver dummy_impl;
scoped_refptr<LayerAnimationController> controller_impl(

Powered by Google App Engine
This is Rietveld 408576698