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

Unified Diff: cc/layer_animation_controller_unittest.cc

Issue 12517003: cc: Chromify the Animation and LayerAnimationController classes (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/layer_animation_controller.cc ('k') | cc/layer_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/layer_animation_controller_unittest.cc
diff --git a/cc/layer_animation_controller_unittest.cc b/cc/layer_animation_controller_unittest.cc
index 7006ebc6268f153b5bcd819c86e09a7c22faa9ec..dc75f3831e7a865f8981cdba957fb788f85e4062 100644
--- a/cc/layer_animation_controller_unittest.cc
+++ b/cc/layer_animation_controller_unittest.cc
@@ -16,736 +16,885 @@
namespace cc {
namespace {
-void expectTranslateX(double translateX, const gfx::Transform& matrix)
-{
- EXPECT_FLOAT_EQ(translateX, matrix.matrix().getDouble(0, 3));
-}
+void ExpectTranslateX(double translate_x, const gfx::Transform& matrix) {
+ EXPECT_FLOAT_EQ(translate_x, matrix.matrix().getDouble(0, 3)); }
-scoped_ptr<Animation> createAnimation(scoped_ptr<AnimationCurve> curve, int id, Animation::TargetProperty property)
-{
- return Animation::create(curve.Pass(), 0, id, property);
+scoped_ptr<Animation> CreateAnimation(scoped_ptr<AnimationCurve> curve,
+ int id,
+ Animation::TargetProperty property) {
+ return Animation::Create(curve.Pass(), 0, id, property);
}
-TEST(LayerAnimationControllerTest, syncNewAnimation)
-{
- FakeLayerAnimationValueObserver dummyImpl;
- scoped_refptr<LayerAnimationController> controllerImpl(LayerAnimationController::create(0));
- controllerImpl->addObserver(&dummyImpl);
- FakeLayerAnimationValueObserver dummy;
- scoped_refptr<LayerAnimationController> controller(LayerAnimationController::create(0));
- controller->addObserver(&dummy);
+TEST(LayerAnimationControllerTest, SyncNewAnimation) {
+ FakeLayerAnimationValueObserver dummy_impl;
+ scoped_refptr<LayerAnimationController> controller_impl(
+ LayerAnimationController::Create(0));
+ controller_impl->AddObserver(&dummy_impl);
+ FakeLayerAnimationValueObserver dummy;
+ scoped_refptr<LayerAnimationController> controller(
+ LayerAnimationController::Create(0));
+ controller->AddObserver(&dummy);
- EXPECT_FALSE(controllerImpl->getAnimation(0, Animation::Opacity));
+ EXPECT_FALSE(controller_impl->GetAnimation(0, Animation::Opacity));
- addOpacityTransitionToController(*controller, 1, 0, 1, false);
+ addOpacityTransitionToController(*controller, 1, 0, 1, false);
- controller->pushAnimationUpdatesTo(controllerImpl.get());
+ controller->PushAnimationUpdatesTo(controller_impl.get());
- EXPECT_TRUE(controllerImpl->getAnimation(0, Animation::Opacity));
- EXPECT_EQ(Animation::WaitingForTargetAvailability, controllerImpl->getAnimation(0, Animation::Opacity)->runState());
+ EXPECT_TRUE(controller_impl->GetAnimation(0, Animation::Opacity));
+ EXPECT_EQ(Animation::WaitingForTargetAvailability,
+ controller_impl->GetAnimation(0, Animation::Opacity)->run_state());
}
// If an animation is started on the impl thread before it is ticked on the main
// thread, we must be sure to respect the synchronized start time.
-TEST(LayerAnimationControllerTest, doNotClobberStartTimes)
-{
- FakeLayerAnimationValueObserver dummyImpl;
- scoped_refptr<LayerAnimationController> controllerImpl(LayerAnimationController::create(0));
- controllerImpl->addObserver(&dummyImpl);
- FakeLayerAnimationValueObserver dummy;
- scoped_refptr<LayerAnimationController> controller(LayerAnimationController::create(0));
- controller->addObserver(&dummy);
-
- EXPECT_FALSE(controllerImpl->getAnimation(0, Animation::Opacity));
-
- addOpacityTransitionToController(*controller, 1, 0, 1, false);
-
- controller->pushAnimationUpdatesTo(controllerImpl.get());
-
- EXPECT_TRUE(controllerImpl->getAnimation(0, Animation::Opacity));
- EXPECT_EQ(Animation::WaitingForTargetAvailability, controllerImpl->getAnimation(0, Animation::Opacity)->runState());
-
- AnimationEventsVector events;
- controllerImpl->animate(1);
- controllerImpl->updateState(&events);
-
- // Synchronize the start times.
- EXPECT_EQ(1u, events.size());
- controller->OnAnimationStarted(events[0]);
- EXPECT_EQ(controller->getAnimation(0, Animation::Opacity)->startTime(), controllerImpl->getAnimation(0, Animation::Opacity)->startTime());
-
- // Start the animation on the main thread. Should not affect the start time.
- controller->animate(1.5);
- controller->updateState(0);
- EXPECT_EQ(controller->getAnimation(0, Animation::Opacity)->startTime(), controllerImpl->getAnimation(0, Animation::Opacity)->startTime());
+TEST(LayerAnimationControllerTest, DoNotClobberStartTimes) {
+ FakeLayerAnimationValueObserver dummy_impl;
+ scoped_refptr<LayerAnimationController> controller_impl(
+ LayerAnimationController::Create(0));
+ controller_impl->AddObserver(&dummy_impl);
+ FakeLayerAnimationValueObserver dummy;
+ scoped_refptr<LayerAnimationController> controller(
+ LayerAnimationController::Create(0));
+ controller->AddObserver(&dummy);
+
+ EXPECT_FALSE(controller_impl->GetAnimation(0, Animation::Opacity));
+
+ addOpacityTransitionToController(*controller, 1, 0, 1, false);
+
+ controller->PushAnimationUpdatesTo(controller_impl.get());
+
+ EXPECT_TRUE(controller_impl->GetAnimation(0, Animation::Opacity));
+ EXPECT_EQ(Animation::WaitingForTargetAvailability,
+ controller_impl->GetAnimation(0, Animation::Opacity)->run_state());
+
+ AnimationEventsVector events;
+ controller_impl->Animate(1.0);
+ controller_impl->UpdateState(&events);
+
+ // Synchronize the start times.
+ EXPECT_EQ(1u, events.size());
+ controller->OnAnimationStarted(events[0]);
+ EXPECT_EQ(controller->GetAnimation(0, Animation::Opacity)->start_time(),
+ controller_impl->GetAnimation(0, Animation::Opacity)->start_time());
+
+ // Start the animation on the main thread. Should not affect the start time.
+ controller->Animate(1.5);
+ controller->UpdateState(NULL);
+ EXPECT_EQ(controller->GetAnimation(0, Animation::Opacity)->start_time(),
+ controller_impl->GetAnimation(0, Animation::Opacity)->start_time());
}
-TEST(LayerAnimationControllerTest, syncPauseAndResume)
-{
- FakeLayerAnimationValueObserver dummyImpl;
- scoped_refptr<LayerAnimationController> controllerImpl(LayerAnimationController::create(0));
- controllerImpl->addObserver(&dummyImpl);
- FakeLayerAnimationValueObserver dummy;
- scoped_refptr<LayerAnimationController> controller(LayerAnimationController::create(0));
- controller->addObserver(&dummy);
-
- EXPECT_FALSE(controllerImpl->getAnimation(0, Animation::Opacity));
-
- addOpacityTransitionToController(*controller, 1, 0, 1, false);
-
- controller->pushAnimationUpdatesTo(controllerImpl.get());
-
- EXPECT_TRUE(controllerImpl->getAnimation(0, Animation::Opacity));
- EXPECT_EQ(Animation::WaitingForTargetAvailability, controllerImpl->getAnimation(0, Animation::Opacity)->runState());
-
- // Start the animations on each controller.
- AnimationEventsVector events;
- controllerImpl->animate(0);
- controllerImpl->updateState(&events);
- controller->animate(0);
- controller->updateState(0);
- EXPECT_EQ(Animation::Running, controllerImpl->getAnimation(0, Animation::Opacity)->runState());
- EXPECT_EQ(Animation::Running, controller->getAnimation(0, Animation::Opacity)->runState());
-
- // Pause the main-thread animation.
- controller->suspendAnimations(1);
- EXPECT_EQ(Animation::Paused, controller->getAnimation(0, Animation::Opacity)->runState());
-
- // The pause run state change should make it to the impl thread controller.
- controller->pushAnimationUpdatesTo(controllerImpl.get());
- EXPECT_EQ(Animation::Paused, controllerImpl->getAnimation(0, Animation::Opacity)->runState());
-
- // Resume the main-thread animation.
- controller->resumeAnimations(2);
- EXPECT_EQ(Animation::Running, controller->getAnimation(0, Animation::Opacity)->runState());
-
- // The pause run state change should make it to the impl thread controller.
- controller->pushAnimationUpdatesTo(controllerImpl.get());
- EXPECT_EQ(Animation::Running, controllerImpl->getAnimation(0, Animation::Opacity)->runState());
+TEST(LayerAnimationControllerTest, SyncPauseAndResume) {
+ FakeLayerAnimationValueObserver dummy_impl;
+ scoped_refptr<LayerAnimationController> controller_impl(
+ LayerAnimationController::Create(0));
+ controller_impl->AddObserver(&dummy_impl);
+ FakeLayerAnimationValueObserver dummy;
+ scoped_refptr<LayerAnimationController> controller(
+ LayerAnimationController::Create(0));
+ controller->AddObserver(&dummy);
+
+ EXPECT_FALSE(controller_impl->GetAnimation(0, Animation::Opacity));
+
+ addOpacityTransitionToController(*controller, 1, 0, 1, false);
+
+ controller->PushAnimationUpdatesTo(controller_impl.get());
+
+ EXPECT_TRUE(controller_impl->GetAnimation(0, Animation::Opacity));
+ EXPECT_EQ(Animation::WaitingForTargetAvailability,
+ controller_impl->GetAnimation(0, Animation::Opacity)->run_state());
+
+ // Start the animations on each controller.
+ AnimationEventsVector events;
+ controller_impl->Animate(0.0);
+ controller_impl->UpdateState(&events);
+ controller->Animate(0.0);
+ controller->UpdateState(NULL);
+ EXPECT_EQ(Animation::Running,
+ controller_impl->GetAnimation(0, Animation::Opacity)->run_state());
+ EXPECT_EQ(Animation::Running,
+ controller->GetAnimation(0, Animation::Opacity)->run_state());
+
+ // Pause the main-thread animation.
+ controller->SuspendAnimations(1.0);
+ EXPECT_EQ(Animation::Paused,
+ controller->GetAnimation(0, Animation::Opacity)->run_state());
+
+ // The pause run state change should make it to the impl thread controller.
+ controller->PushAnimationUpdatesTo(controller_impl.get());
+ EXPECT_EQ(Animation::Paused,
+ controller_impl->GetAnimation(0, Animation::Opacity)->run_state());
+
+ // Resume the main-thread animation.
+ controller->ResumeAnimations(2.0);
+ EXPECT_EQ(Animation::Running,
+ controller->GetAnimation(0, Animation::Opacity)->run_state());
+
+ // The pause run state change should make it to the impl thread controller.
+ controller->PushAnimationUpdatesTo(controller_impl.get());
+ EXPECT_EQ(Animation::Running,
+ controller_impl->GetAnimation(0, Animation::Opacity)->run_state());
}
-TEST(LayerAnimationControllerTest, doNotSyncFinishedAnimation)
-{
- FakeLayerAnimationValueObserver dummyImpl;
- scoped_refptr<LayerAnimationController> controllerImpl(LayerAnimationController::create(0));
- controllerImpl->addObserver(&dummyImpl);
- FakeLayerAnimationValueObserver dummy;
- scoped_refptr<LayerAnimationController> controller(LayerAnimationController::create(0));
- controller->addObserver(&dummy);
+TEST(LayerAnimationControllerTest, DoNotSyncFinishedAnimation) {
+ FakeLayerAnimationValueObserver dummy_impl;
+ scoped_refptr<LayerAnimationController> controller_impl(
+ LayerAnimationController::Create(0));
+ controller_impl->AddObserver(&dummy_impl);
+ FakeLayerAnimationValueObserver dummy;
+ scoped_refptr<LayerAnimationController> controller(
+ LayerAnimationController::Create(0));
+ controller->AddObserver(&dummy);
- EXPECT_FALSE(controllerImpl->getAnimation(0, Animation::Opacity));
+ EXPECT_FALSE(controller_impl->GetAnimation(0, Animation::Opacity));
- int animationId = addOpacityTransitionToController(*controller, 1, 0, 1, false);
+ int animation_id =
+ addOpacityTransitionToController(*controller, 1, 0, 1, false);
- controller->pushAnimationUpdatesTo(controllerImpl.get());
+ controller->PushAnimationUpdatesTo(controller_impl.get());
- EXPECT_TRUE(controllerImpl->getAnimation(0, Animation::Opacity));
- EXPECT_EQ(Animation::WaitingForTargetAvailability, controllerImpl->getAnimation(0, Animation::Opacity)->runState());
+ EXPECT_TRUE(controller_impl->GetAnimation(0, Animation::Opacity));
+ EXPECT_EQ(Animation::WaitingForTargetAvailability,
+ controller_impl->GetAnimation(0, Animation::Opacity)->run_state());
- // Notify main thread controller that the animation has started.
- AnimationEvent animationStartedEvent(AnimationEvent::Started, 0, 0, Animation::Opacity, 0);
- controller->OnAnimationStarted(animationStartedEvent);
+ // Notify main thread controller that the animation has started.
+ AnimationEvent animation_started_event(
+ AnimationEvent::Started, 0, 0, Animation::Opacity, 0);
+ controller->OnAnimationStarted(animation_started_event);
- // Force animation to complete on impl thread.
- controllerImpl->removeAnimation(animationId);
+ // Force animation to complete on impl thread.
+ controller_impl->RemoveAnimation(animation_id);
- EXPECT_FALSE(controllerImpl->getAnimation(animationId, Animation::Opacity));
+ EXPECT_FALSE(controller_impl->GetAnimation(animation_id, Animation::Opacity));
- controller->pushAnimationUpdatesTo(controllerImpl.get());
+ controller->PushAnimationUpdatesTo(controller_impl.get());
- // Even though the main thread has a 'new' animation, it should not be pushed because the animation has already completed on the impl thread.
- EXPECT_FALSE(controllerImpl->getAnimation(animationId, Animation::Opacity));
+ // Even though the main thread has a 'new' animation, it should not be pushed
+ // because the animation has already completed on the impl thread.
+ EXPECT_FALSE(controller_impl->GetAnimation(animation_id, Animation::Opacity));
}
// Tests that transitioning opacity from 0 to 1 works as expected.
-static const AnimationEvent* getMostRecentPropertyUpdateEvent(const AnimationEventsVector* events)
-{
- const AnimationEvent* event = 0;
- for (size_t i = 0; i < events->size(); ++i)
- if ((*events)[i].type == AnimationEvent::PropertyUpdate)
- event = &(*events)[i];
+static const AnimationEvent* GetMostRecentPropertyUpdateEvent(
+ const AnimationEventsVector* events) {
+ const AnimationEvent* event = 0;
+ for (size_t i = 0; i < events->size(); ++i)
+ if ((*events)[i].type == AnimationEvent::PropertyUpdate)
+ event = &(*events)[i];
- return event;
+ return event;
}
-TEST(LayerAnimationControllerTest, TrivialTransition)
-{
- scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEventsVector));
- FakeLayerAnimationValueObserver dummy;
- scoped_refptr<LayerAnimationController> controller(LayerAnimationController::create(0));
- controller->addObserver(&dummy);
-
- scoped_ptr<Animation> toAdd(createAnimation(make_scoped_ptr(new FakeFloatTransition(1, 0, 1)).PassAs<AnimationCurve>(), 1, Animation::Opacity));
-
- controller->addAnimation(toAdd.Pass());
- controller->animate(0);
- controller->updateState(events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0, dummy.opacity());
- // A non-implOnly animation should not generate property updates.
- const AnimationEvent* event = getMostRecentPropertyUpdateEvent(events.get());
- EXPECT_FALSE(event);
- controller->animate(1);
- controller->updateState(events.get());
- EXPECT_EQ(1, dummy.opacity());
- EXPECT_FALSE(controller->hasActiveAnimation());
- event = getMostRecentPropertyUpdateEvent(events.get());
- EXPECT_FALSE(event);
+TEST(LayerAnimationControllerTest, TrivialTransition) {
+ scoped_ptr<AnimationEventsVector> events(
+ make_scoped_ptr(new AnimationEventsVector));
+ FakeLayerAnimationValueObserver dummy;
+ scoped_refptr<LayerAnimationController> controller(
+ LayerAnimationController::Create(0));
+ controller->AddObserver(&dummy);
+
+ scoped_ptr<Animation> to_add(CreateAnimation(
+ scoped_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)).Pass(),
+ 1,
+ Animation::Opacity));
+
+ controller->AddAnimation(to_add.Pass());
+ controller->Animate(0.0);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(0.f, dummy.opacity());
+ // A non-implOnly animation should not generate property updates.
+ const AnimationEvent* event = GetMostRecentPropertyUpdateEvent(events.get());
+ EXPECT_FALSE(event);
+ controller->Animate(1.0);
+ controller->UpdateState(events.get());
+ EXPECT_EQ(1.f, dummy.opacity());
+ EXPECT_FALSE(controller->HasActiveAnimation());
+ event = GetMostRecentPropertyUpdateEvent(events.get());
+ EXPECT_FALSE(event);
}
-TEST(LayerAnimationControllerTest, TrivialTransitionOnImpl)
-{
- scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEventsVector));
- FakeLayerAnimationValueObserver dummyImpl;
- scoped_refptr<LayerAnimationController> controllerImpl(LayerAnimationController::create(0));
- controllerImpl->addObserver(&dummyImpl);
-
- scoped_ptr<Animation> toAdd(createAnimation(make_scoped_ptr(new FakeFloatTransition(1, 0, 1)).PassAs<AnimationCurve>(), 1, Animation::Opacity));
- toAdd->setIsImplOnly(true);
-
- controllerImpl->addAnimation(toAdd.Pass());
- controllerImpl->animate(0);
- controllerImpl->updateState(events.get());
- EXPECT_TRUE(controllerImpl->hasActiveAnimation());
- EXPECT_EQ(0, dummyImpl.opacity());
- EXPECT_EQ(2, events->size());
- const AnimationEvent* startOpacityEvent = getMostRecentPropertyUpdateEvent(events.get());
- EXPECT_EQ(0, startOpacityEvent->opacity);
-
- controllerImpl->animate(1);
- controllerImpl->updateState(events.get());
- EXPECT_EQ(1, dummyImpl.opacity());
- EXPECT_FALSE(controllerImpl->hasActiveAnimation());
- EXPECT_EQ(4, events->size());
- const AnimationEvent* endOpacityEvent = getMostRecentPropertyUpdateEvent(events.get());
- EXPECT_EQ(1, endOpacityEvent->opacity);
+TEST(LayerAnimationControllerTest, TrivialTransitionOnImpl) {
+ scoped_ptr<AnimationEventsVector> events(
+ make_scoped_ptr(new AnimationEventsVector));
+ FakeLayerAnimationValueObserver dummy_impl;
+ scoped_refptr<LayerAnimationController> controller_impl(
+ LayerAnimationController::Create(0));
+ controller_impl->AddObserver(&dummy_impl);
+
+ scoped_ptr<Animation> to_add(CreateAnimation(
+ scoped_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)).Pass(),
+ 1,
+ Animation::Opacity));
+ to_add->set_is_impl_only(true);
+
+ controller_impl->AddAnimation(to_add.Pass());
+ controller_impl->Animate(0.0);
+ controller_impl->UpdateState(events.get());
+ EXPECT_TRUE(controller_impl->HasActiveAnimation());
+ EXPECT_EQ(0.f, dummy_impl.opacity());
+ EXPECT_EQ(2, events->size());
+ const AnimationEvent* start_opacity_event =
+ GetMostRecentPropertyUpdateEvent(events.get());
+ EXPECT_EQ(0, start_opacity_event->opacity);
+
+ controller_impl->Animate(1.0);
+ controller_impl->UpdateState(events.get());
+ EXPECT_EQ(1.f, dummy_impl.opacity());
+ EXPECT_FALSE(controller_impl->HasActiveAnimation());
+ EXPECT_EQ(4, events->size());
+ const AnimationEvent* end_opacity_event =
+ GetMostRecentPropertyUpdateEvent(events.get());
+ EXPECT_EQ(1, end_opacity_event->opacity);
}
-TEST(LayerAnimationControllerTest, TrivialTransformOnImpl)
-{
- scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEventsVector));
- FakeLayerAnimationValueObserver dummyImpl;
- scoped_refptr<LayerAnimationController> controllerImpl(LayerAnimationController::create(0));
- controllerImpl->addObserver(&dummyImpl);
-
- // Choose different values for x and y to avoid coincidental values in the
- // observed transforms.
- const float deltaX = 3;
- const float deltaY = 4;
-
- scoped_ptr<KeyframedTransformAnimationCurve> curve(KeyframedTransformAnimationCurve::create());
-
- // Create simple Transform animation.
- TransformOperations operations;
- curve->addKeyframe(TransformKeyframe::create(0, operations, scoped_ptr<cc::TimingFunction>()));
- operations.AppendTranslate(deltaX, deltaY, 0);
- curve->addKeyframe(TransformKeyframe::create(1, operations, scoped_ptr<cc::TimingFunction>()));
-
- scoped_ptr<Animation> animation(Animation::create(curve.PassAs<AnimationCurve>(), 1, 0, Animation::Transform));
- animation->setIsImplOnly(true);
- controllerImpl->addAnimation(animation.Pass());
-
- // Run animation.
- controllerImpl->animate(0);
- controllerImpl->updateState(events.get());
- EXPECT_TRUE(controllerImpl->hasActiveAnimation());
- EXPECT_EQ(gfx::Transform(), dummyImpl.transform());
- EXPECT_EQ(2, events->size());
- const AnimationEvent* startTransformEvent = getMostRecentPropertyUpdateEvent(events.get());
- ASSERT_TRUE(startTransformEvent);
- EXPECT_EQ(gfx::Transform(), startTransformEvent->transform);
-
- gfx::Transform expectedTransform;
- expectedTransform.Translate(deltaX, deltaY);
-
- controllerImpl->animate(1);
- controllerImpl->updateState(events.get());
- EXPECT_EQ(expectedTransform, dummyImpl.transform());
- EXPECT_FALSE(controllerImpl->hasActiveAnimation());
- EXPECT_EQ(4, events->size());
- const AnimationEvent* endTransformEvent = getMostRecentPropertyUpdateEvent(events.get());
- EXPECT_EQ(expectedTransform, endTransformEvent->transform);
+TEST(LayerAnimationControllerTest, TrivialTransformOnImpl) {
+ scoped_ptr<AnimationEventsVector> events(
+ make_scoped_ptr(new AnimationEventsVector));
+ FakeLayerAnimationValueObserver dummy_impl;
+ scoped_refptr<LayerAnimationController> controller_impl(
+ LayerAnimationController::Create(0));
+ controller_impl->AddObserver(&dummy_impl);
+
+ // Choose different values for x and y to avoid coincidental values in the
+ // observed transforms.
+ const float delta_x = 3;
+ const float delta_y = 4;
+
+ scoped_ptr<KeyframedTransformAnimationCurve> curve(
+ KeyframedTransformAnimationCurve::Create());
+
+ // Create simple Transform animation.
+ TransformOperations operations;
+ curve->AddKeyframe(TransformKeyframe::Create(
+ 0, operations, scoped_ptr<cc::TimingFunction>()));
+ operations.AppendTranslate(delta_x, delta_y, 0);
+ curve->AddKeyframe(TransformKeyframe::Create(
+ 1, operations, scoped_ptr<cc::TimingFunction>()));
+
+ scoped_ptr<Animation> animation(Animation::Create(
+ curve.PassAs<AnimationCurve>(), 1, 0, Animation::Transform));
+ animation->set_is_impl_only(true);
+ controller_impl->AddAnimation(animation.Pass());
+
+ // Run animation.
+ controller_impl->Animate(0.0);
+ controller_impl->UpdateState(events.get());
+ EXPECT_TRUE(controller_impl->HasActiveAnimation());
+ EXPECT_EQ(gfx::Transform(), dummy_impl.transform());
+ EXPECT_EQ(2, events->size());
+ const AnimationEvent* start_transform_event =
+ GetMostRecentPropertyUpdateEvent(events.get());
+ ASSERT_TRUE(start_transform_event);
+ EXPECT_EQ(gfx::Transform(), start_transform_event->transform);
+
+ gfx::Transform expected_transform;
+ expected_transform.Translate(delta_x, delta_y);
+
+ controller_impl->Animate(1.0);
+ controller_impl->UpdateState(events.get());
+ EXPECT_EQ(expected_transform, dummy_impl.transform());
+ EXPECT_FALSE(controller_impl->HasActiveAnimation());
+ EXPECT_EQ(4, events->size());
+ const AnimationEvent* end_transform_event =
+ GetMostRecentPropertyUpdateEvent(events.get());
+ EXPECT_EQ(expected_transform, end_transform_event->transform);
}
-// Tests animations that are waiting for a synchronized start time do not finish.
-TEST(LayerAnimationControllerTest, AnimationsWaitingForStartTimeDoNotFinishIfTheyWaitLongerToStartThanTheirDuration)
-{
- scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEventsVector));
- FakeLayerAnimationValueObserver dummy;
- scoped_refptr<LayerAnimationController> controller(LayerAnimationController::create(0));
- controller->addObserver(&dummy);
-
- scoped_ptr<Animation> toAdd(createAnimation(make_scoped_ptr(new FakeFloatTransition(1, 0, 1)).PassAs<AnimationCurve>(), 1, Animation::Opacity));
- toAdd->setNeedsSynchronizedStartTime(true);
-
- // We should pause at the first keyframe indefinitely waiting for that animation to start.
- controller->addAnimation(toAdd.Pass());
- controller->animate(0);
- controller->updateState(events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0, dummy.opacity());
- controller->animate(1);
- controller->updateState(events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0, dummy.opacity());
- controller->animate(2);
- controller->updateState(events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0, dummy.opacity());
-
- // Send the synchronized start time.
- controller->OnAnimationStarted(AnimationEvent(AnimationEvent::Started, 0, 1, Animation::Opacity, 2));
- controller->animate(5);
- controller->updateState(events.get());
- EXPECT_EQ(1, dummy.opacity());
- EXPECT_FALSE(controller->hasActiveAnimation());
+// Tests animations that are waiting for a synchronized start time do not
+// finish.
+TEST(LayerAnimationControllerTest,
+ AnimationsWaitingForStartTimeDoNotFinishIfTheyWaitLongerToStartThanTheirDuration) {
+ scoped_ptr<AnimationEventsVector> events(
+ make_scoped_ptr(new AnimationEventsVector));
+ FakeLayerAnimationValueObserver dummy;
+ scoped_refptr<LayerAnimationController> controller(
+ LayerAnimationController::Create(0));
+ controller->AddObserver(&dummy);
+
+ scoped_ptr<Animation> to_add(CreateAnimation(
+ scoped_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)).Pass(),
+ 1,
+ Animation::Opacity));
+ to_add->set_needs_synchronized_start_time(true);
+
+ // We should pause at the first keyframe indefinitely waiting for that
+ // animation to start.
+ controller->AddAnimation(to_add.Pass());
+ controller->Animate(0.0);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(0.f, dummy.opacity());
+ controller->Animate(1.0);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(0.f, dummy.opacity());
+ controller->Animate(2.0);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(0.f, dummy.opacity());
+
+ // Send the synchronized start time.
+ controller->OnAnimationStarted(AnimationEvent(
+ AnimationEvent::Started, 0, 1, Animation::Opacity, 2));
+ controller->Animate(5.0);
+ controller->UpdateState(events.get());
+ EXPECT_EQ(1.f, dummy.opacity());
+ EXPECT_FALSE(controller->HasActiveAnimation());
}
// Tests that two queued animations affecting the same property run in sequence.
-TEST(LayerAnimationControllerTest, TrivialQueuing)
-{
- scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEventsVector));
- FakeLayerAnimationValueObserver dummy;
- scoped_refptr<LayerAnimationController> controller(LayerAnimationController::create(0));
- controller->addObserver(&dummy);
-
- controller->addAnimation(createAnimation(make_scoped_ptr(new FakeFloatTransition(1, 0, 1)).PassAs<AnimationCurve>(), 1, Animation::Opacity));
- controller->addAnimation(createAnimation(make_scoped_ptr(new FakeFloatTransition(1, 1, 0.5)).PassAs<AnimationCurve>(), 2, Animation::Opacity));
-
- controller->animate(0);
- controller->updateState(events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0, dummy.opacity());
- controller->animate(1);
- controller->updateState(events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(1, dummy.opacity());
- controller->animate(2);
- controller->updateState(events.get());
- EXPECT_EQ(0.5, dummy.opacity());
- EXPECT_FALSE(controller->hasActiveAnimation());
+TEST(LayerAnimationControllerTest, TrivialQueuing) {
+ scoped_ptr<AnimationEventsVector> events(
+ make_scoped_ptr(new AnimationEventsVector));
+ FakeLayerAnimationValueObserver dummy;
+ scoped_refptr<LayerAnimationController> controller(
+ LayerAnimationController::Create(0));
+ controller->AddObserver(&dummy);
+
+ controller->AddAnimation(CreateAnimation(
+ scoped_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)).Pass(),
+ 1,
+ Animation::Opacity));
+ controller->AddAnimation(CreateAnimation(
+ scoped_ptr<AnimationCurve>(
+ new FakeFloatTransition(1.0, 1.f, 0.5f)).Pass(),
+ 2,
+ Animation::Opacity));
+
+ controller->Animate(0.0);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(0.f, dummy.opacity());
+ controller->Animate(1.0);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(1.f, dummy.opacity());
+ controller->Animate(2.0);
+ controller->UpdateState(events.get());
+ EXPECT_EQ(0.5f, dummy.opacity());
+ EXPECT_FALSE(controller->HasActiveAnimation());
}
// Tests interrupting a transition with another transition.
-TEST(LayerAnimationControllerTest, Interrupt)
-{
- scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEventsVector));
- FakeLayerAnimationValueObserver dummy;
- scoped_refptr<LayerAnimationController> controller(LayerAnimationController::create(0));
- controller->addObserver(&dummy);
- controller->addAnimation(createAnimation(make_scoped_ptr(new FakeFloatTransition(1, 0, 1)).PassAs<AnimationCurve>(), 1, Animation::Opacity));
- controller->animate(0);
- controller->updateState(events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0, dummy.opacity());
-
- scoped_ptr<Animation> toAdd(createAnimation(make_scoped_ptr(new FakeFloatTransition(1, 1, 0.5)).PassAs<AnimationCurve>(), 2, Animation::Opacity));
- toAdd->setRunState(Animation::WaitingForNextTick, 0);
- controller->addAnimation(toAdd.Pass());
-
- // Since the animation was in the WaitingForNextTick state, it should start right in
- // this call to animate.
- controller->animate(0.5);
- controller->updateState(events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(1, dummy.opacity());
- controller->animate(1.5);
- controller->updateState(events.get());
- EXPECT_EQ(0.5, dummy.opacity());
- EXPECT_FALSE(controller->hasActiveAnimation());
+TEST(LayerAnimationControllerTest, Interrupt) {
+ scoped_ptr<AnimationEventsVector> events(
+ make_scoped_ptr(new AnimationEventsVector));
+ FakeLayerAnimationValueObserver dummy;
+ scoped_refptr<LayerAnimationController> controller(
+ LayerAnimationController::Create(0));
+ controller->AddObserver(&dummy);
+ controller->AddAnimation(CreateAnimation(
+ scoped_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)).Pass(),
+ 1,
+ Animation::Opacity));
+ controller->Animate(0.0);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(0.f, dummy.opacity());
+
+ scoped_ptr<Animation> to_add(CreateAnimation(
+ scoped_ptr<AnimationCurve>(
+ new FakeFloatTransition(1.0, 1.f, 0.5f)).Pass(),
+ 2,
+ Animation::Opacity));
+ to_add->SetRunState(Animation::WaitingForNextTick, 0);
+ controller->AddAnimation(to_add.Pass());
+
+ // Since the animation was in the WaitingForNextTick state, it should start
+ // right in this call to animate.
+ controller->Animate(0.5);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(1.f, dummy.opacity());
+ controller->Animate(1.5);
+ controller->UpdateState(events.get());
+ EXPECT_EQ(0.5f, dummy.opacity());
+ EXPECT_FALSE(controller->HasActiveAnimation());
}
-// Tests scheduling two animations to run together when only one property is free.
-TEST(LayerAnimationControllerTest, ScheduleTogetherWhenAPropertyIsBlocked)
-{
- scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEventsVector));
- FakeLayerAnimationValueObserver dummy;
- scoped_refptr<LayerAnimationController> controller(LayerAnimationController::create(0));
- controller->addObserver(&dummy);
-
- controller->addAnimation(createAnimation(make_scoped_ptr(new FakeTransformTransition(1)).PassAs<AnimationCurve>(), 1, Animation::Transform));
- controller->addAnimation(createAnimation(make_scoped_ptr(new FakeTransformTransition(1)).PassAs<AnimationCurve>(), 2, Animation::Transform));
- controller->addAnimation(createAnimation(make_scoped_ptr(new FakeFloatTransition(1, 0, 1)).PassAs<AnimationCurve>(), 2, Animation::Opacity));
-
- controller->animate(0);
- controller->updateState(events.get());
- EXPECT_EQ(0, dummy.opacity());
- EXPECT_TRUE(controller->hasActiveAnimation());
- controller->animate(1);
- controller->updateState(events.get());
- // Should not have started the float transition yet.
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0, dummy.opacity());
- // The float animation should have started at time 1 and should be done.
- controller->animate(2);
- controller->updateState(events.get());
- EXPECT_EQ(1, dummy.opacity());
- EXPECT_FALSE(controller->hasActiveAnimation());
+// Tests scheduling two animations to run together when only one property is
+// free.
+TEST(LayerAnimationControllerTest, ScheduleTogetherWhenAPropertyIsBlocked) {
+ scoped_ptr<AnimationEventsVector> events(
+ make_scoped_ptr(new AnimationEventsVector));
+ FakeLayerAnimationValueObserver dummy;
+ scoped_refptr<LayerAnimationController> controller(
+ LayerAnimationController::Create(0));
+ controller->AddObserver(&dummy);
+
+ controller->AddAnimation(CreateAnimation(
+ scoped_ptr<AnimationCurve>(new FakeTransformTransition(1)).Pass(),
+ 1,
+ Animation::Transform));
+ controller->AddAnimation(CreateAnimation(
+ scoped_ptr<AnimationCurve>(new FakeTransformTransition(1)).Pass(),
+ 2,
+ Animation::Transform));
+ controller->AddAnimation(CreateAnimation(
+ scoped_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)).Pass(),
+ 2,
+ Animation::Opacity));
+
+ controller->Animate(0.0);
+ controller->UpdateState(events.get());
+ EXPECT_EQ(0.f, dummy.opacity());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ controller->Animate(1.0);
+ controller->UpdateState(events.get());
+ // Should not have started the float transition yet.
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(0.f, dummy.opacity());
+ // The float animation should have started at time 1 and should be done.
+ controller->Animate(2.0);
+ controller->UpdateState(events.get());
+ EXPECT_EQ(1.f, dummy.opacity());
+ EXPECT_FALSE(controller->HasActiveAnimation());
}
-// Tests scheduling two animations to run together with different lengths and another
-// animation queued to start when the shorter animation finishes (should wait
-// for both to finish).
-TEST(LayerAnimationControllerTest, ScheduleTogetherWithAnAnimWaiting)
-{
- scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEventsVector));
- FakeLayerAnimationValueObserver dummy;
- scoped_refptr<LayerAnimationController> controller(LayerAnimationController::create(0));
- controller->addObserver(&dummy);
-
- controller->addAnimation(createAnimation(make_scoped_ptr(new FakeTransformTransition(2)).PassAs<AnimationCurve>(), 1, Animation::Transform));
- controller->addAnimation(createAnimation(make_scoped_ptr(new FakeFloatTransition(1, 0, 1)).PassAs<AnimationCurve>(), 1, Animation::Opacity));
- controller->addAnimation(createAnimation(make_scoped_ptr(new FakeFloatTransition(1, 1, 0.5)).PassAs<AnimationCurve>(), 2, Animation::Opacity));
-
- // Animations with id 1 should both start now.
- controller->animate(0);
- controller->updateState(events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0, dummy.opacity());
- // The opacity animation should have finished at time 1, but the group
- // of animations with id 1 don't finish until time 2 because of the length
- // of the transform animation.
- controller->animate(2);
- controller->updateState(events.get());
- // Should not have started the float transition yet.
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(1, dummy.opacity());
-
- // The second opacity animation should start at time 2 and should be done by time 3
- controller->animate(3);
- controller->updateState(events.get());
- EXPECT_EQ(0.5, dummy.opacity());
- EXPECT_FALSE(controller->hasActiveAnimation());
+// Tests scheduling two animations to run together with different lengths and
+// another animation queued to start when the shorter animation finishes (should
+// wait for both to finish).
+TEST(LayerAnimationControllerTest, ScheduleTogetherWithAnAnimWaiting) {
+ scoped_ptr<AnimationEventsVector> events(
+ make_scoped_ptr(new AnimationEventsVector));
+ FakeLayerAnimationValueObserver dummy;
+ scoped_refptr<LayerAnimationController> controller(
+ LayerAnimationController::Create(0));
+ controller->AddObserver(&dummy);
+
+ controller->AddAnimation(CreateAnimation(
+ scoped_ptr<AnimationCurve>(new FakeTransformTransition(2)).Pass(),
+ 1,
+ Animation::Transform));
+ controller->AddAnimation(CreateAnimation(
+ scoped_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)).Pass(),
+ 1,
+ Animation::Opacity));
+ controller->AddAnimation(CreateAnimation(
+ scoped_ptr<AnimationCurve>(
+ new FakeFloatTransition(1.0, 1.f, 0.5f)).Pass(),
+ 2,
+ Animation::Opacity));
+
+ // Animations with id 1 should both start now.
+ controller->Animate(0.0);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(0.f, dummy.opacity());
+ // The opacity animation should have finished at time 1, but the group
+ // of animations with id 1 don't finish until time 2 because of the length
+ // of the transform animation.
+ controller->Animate(2.0);
+ controller->UpdateState(events.get());
+ // Should not have started the float transition yet.
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(1.f, dummy.opacity());
+
+ // The second opacity animation should start at time 2 and should be done by
+ // time 3.
+ controller->Animate(3.0);
+ controller->UpdateState(events.get());
+ EXPECT_EQ(0.5f, dummy.opacity());
+ EXPECT_FALSE(controller->HasActiveAnimation());
}
// Tests scheduling an animation to start in the future.
-TEST(LayerAnimationControllerTest, ScheduleAnimation)
-{
- scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEventsVector));
- FakeLayerAnimationValueObserver dummy;
- scoped_refptr<LayerAnimationController> controller(LayerAnimationController::create(0));
- controller->addObserver(&dummy);
-
- scoped_ptr<Animation> toAdd(createAnimation(make_scoped_ptr(new FakeFloatTransition(1, 0, 1)).PassAs<AnimationCurve>(), 1, Animation::Opacity));
- toAdd->setRunState(Animation::WaitingForStartTime, 0);
- toAdd->setStartTime(1);
- controller->addAnimation(toAdd.Pass());
-
- controller->animate(0);
- controller->updateState(events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0, dummy.opacity());
- controller->animate(1);
- controller->updateState(events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0, dummy.opacity());
- controller->animate(2);
- controller->updateState(events.get());
- EXPECT_EQ(1, dummy.opacity());
- EXPECT_FALSE(controller->hasActiveAnimation());
+TEST(LayerAnimationControllerTest, ScheduleAnimation) {
+ scoped_ptr<AnimationEventsVector> events(
+ make_scoped_ptr(new AnimationEventsVector));
+ FakeLayerAnimationValueObserver dummy;
+ scoped_refptr<LayerAnimationController> controller(
+ LayerAnimationController::Create(0));
+ controller->AddObserver(&dummy);
+
+ scoped_ptr<Animation> to_add(CreateAnimation(
+ scoped_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)).Pass(),
+ 1,
+ Animation::Opacity));
+ to_add->SetRunState(Animation::WaitingForStartTime, 0);
+ to_add->set_start_time(1.f);
+ controller->AddAnimation(to_add.Pass());
+
+ controller->Animate(0.0);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(0.f, dummy.opacity());
+ controller->Animate(1.0);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(0.f, dummy.opacity());
+ controller->Animate(2.0);
+ controller->UpdateState(events.get());
+ EXPECT_EQ(1.f, dummy.opacity());
+ EXPECT_FALSE(controller->HasActiveAnimation());
}
-// Tests scheduling an animation to start in the future that's interrupting a running animation.
-TEST(LayerAnimationControllerTest, ScheduledAnimationInterruptsRunningAnimation)
-{
- scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEventsVector));
- FakeLayerAnimationValueObserver dummy;
- scoped_refptr<LayerAnimationController> controller(LayerAnimationController::create(0));
- controller->addObserver(&dummy);
-
- controller->addAnimation(createAnimation(make_scoped_ptr(new FakeFloatTransition(2, 0, 1)).PassAs<AnimationCurve>(), 1, Animation::Opacity));
-
- scoped_ptr<Animation> toAdd(createAnimation(make_scoped_ptr(new FakeFloatTransition(1, 0.5, 0)).PassAs<AnimationCurve>(), 2, Animation::Opacity));
- toAdd->setRunState(Animation::WaitingForStartTime, 0);
- toAdd->setStartTime(1);
- controller->addAnimation(toAdd.Pass());
-
- // First 2s opacity transition should start immediately.
- controller->animate(0);
- controller->updateState(events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0, dummy.opacity());
- controller->animate(0.5);
- controller->updateState(events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0.25, dummy.opacity());
- controller->animate(1);
- controller->updateState(events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0.5, dummy.opacity());
- controller->animate(2);
- controller->updateState(events.get());
- EXPECT_EQ(0, dummy.opacity());
- EXPECT_FALSE(controller->hasActiveAnimation());
+// Tests scheduling an animation to start in the future that's interrupting a
+// running animation.
+TEST(LayerAnimationControllerTest,
+ ScheduledAnimationInterruptsRunningAnimation) {
+ scoped_ptr<AnimationEventsVector> events(
+ make_scoped_ptr(new AnimationEventsVector));
+ FakeLayerAnimationValueObserver dummy;
+ scoped_refptr<LayerAnimationController> controller(
+ LayerAnimationController::Create(0));
+ controller->AddObserver(&dummy);
+
+ controller->AddAnimation(CreateAnimation(
+ scoped_ptr<AnimationCurve>(new FakeFloatTransition(2.0, 0.f, 1.f)).Pass(),
+ 1,
+ Animation::Opacity));
+
+ scoped_ptr<Animation> to_add(CreateAnimation(
+ scoped_ptr<AnimationCurve>(
+ new FakeFloatTransition(1.0, 0.5f, 0.f)).Pass(),
+ 2,
+ Animation::Opacity));
+ to_add->SetRunState(Animation::WaitingForStartTime, 0);
+ to_add->set_start_time(1.f);
+ controller->AddAnimation(to_add.Pass());
+
+ // First 2s opacity transition should start immediately.
+ controller->Animate(0.0);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(0.f, dummy.opacity());
+ controller->Animate(0.5);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(0.25f, dummy.opacity());
+ controller->Animate(1.0);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(0.5f, dummy.opacity());
+ controller->Animate(2.0);
+ controller->UpdateState(events.get());
+ EXPECT_EQ(0.f, dummy.opacity());
+ EXPECT_FALSE(controller->HasActiveAnimation());
}
-// Tests scheduling an animation to start in the future that interrupts a running animation
-// and there is yet another animation queued to start later.
-TEST(LayerAnimationControllerTest, ScheduledAnimationInterruptsRunningAnimationWithAnimInQueue)
-{
- scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEventsVector));
- FakeLayerAnimationValueObserver dummy;
- scoped_refptr<LayerAnimationController> controller(LayerAnimationController::create(0));
- controller->addObserver(&dummy);
-
- controller->addAnimation(createAnimation(make_scoped_ptr(new FakeFloatTransition(2, 0, 1)).PassAs<AnimationCurve>(), 1, Animation::Opacity));
-
- scoped_ptr<Animation> toAdd(createAnimation(make_scoped_ptr(new FakeFloatTransition(2, 0.5, 0)).PassAs<AnimationCurve>(), 2, Animation::Opacity));
- toAdd->setRunState(Animation::WaitingForStartTime, 0);
- toAdd->setStartTime(1);
- controller->addAnimation(toAdd.Pass());
-
- controller->addAnimation(createAnimation(make_scoped_ptr(new FakeFloatTransition(1, 0, 0.75)).PassAs<AnimationCurve>(), 3, Animation::Opacity));
-
- // First 2s opacity transition should start immediately.
- controller->animate(0);
- controller->updateState(events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0, dummy.opacity());
- controller->animate(0.5);
- controller->updateState(events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0.25, dummy.opacity());
- EXPECT_TRUE(controller->hasActiveAnimation());
- controller->animate(1);
- controller->updateState(events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0.5, dummy.opacity());
- controller->animate(3);
- controller->updateState(events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0, dummy.opacity());
- controller->animate(4);
- controller->updateState(events.get());
- EXPECT_EQ(0.75, dummy.opacity());
- EXPECT_FALSE(controller->hasActiveAnimation());
+// Tests scheduling an animation to start in the future that interrupts a
+// running animation and there is yet another animation queued to start later.
+TEST(LayerAnimationControllerTest,
+ ScheduledAnimationInterruptsRunningAnimationWithAnimInQueue) {
+ scoped_ptr<AnimationEventsVector> events(
+ make_scoped_ptr(new AnimationEventsVector));
+ FakeLayerAnimationValueObserver dummy;
+ scoped_refptr<LayerAnimationController> controller(
+ LayerAnimationController::Create(0));
+ controller->AddObserver(&dummy);
+
+ controller->AddAnimation(CreateAnimation(
+ scoped_ptr<AnimationCurve>(new FakeFloatTransition(2.0, 0.f, 1.f)).Pass(),
+ 1,
+ Animation::Opacity));
+
+ scoped_ptr<Animation> to_add(CreateAnimation(
+ scoped_ptr<AnimationCurve>(
+ new FakeFloatTransition(2.0, 0.5f, 0.f)).Pass(),
+ 2,
+ Animation::Opacity));
+ to_add->SetRunState(Animation::WaitingForStartTime, 0);
+ to_add->set_start_time(1.f);
+ controller->AddAnimation(to_add.Pass());
+
+ controller->AddAnimation(CreateAnimation(
+ scoped_ptr<AnimationCurve>(
+ new FakeFloatTransition(1.0, 0.f, 0.75f)).Pass(),
+ 3,
+ Animation::Opacity));
+
+ // First 2s opacity transition should start immediately.
+ controller->Animate(0.0);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(0.f, dummy.opacity());
+ controller->Animate(0.5);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(0.25f, dummy.opacity());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ controller->Animate(1.0);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(0.5f, dummy.opacity());
+ controller->Animate(3.0);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(0.f, dummy.opacity());
+ controller->Animate(4.0);
+ controller->UpdateState(events.get());
+ EXPECT_EQ(0.75f, dummy.opacity());
+ EXPECT_FALSE(controller->HasActiveAnimation());
}
// Test that a looping animation loops and for the correct number of iterations.
-TEST(LayerAnimationControllerTest, TrivialLooping)
-{
- scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEventsVector));
- FakeLayerAnimationValueObserver dummy;
- scoped_refptr<LayerAnimationController> controller(LayerAnimationController::create(0));
- controller->addObserver(&dummy);
-
- scoped_ptr<Animation> toAdd(createAnimation(make_scoped_ptr(new FakeFloatTransition(1, 0, 1)).PassAs<AnimationCurve>(), 1, Animation::Opacity));
- toAdd->setIterations(3);
- controller->addAnimation(toAdd.Pass());
-
- controller->animate(0);
- controller->updateState(events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0, dummy.opacity());
- controller->animate(1.25);
- controller->updateState(events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0.25, dummy.opacity());
- controller->animate(1.75);
- controller->updateState(events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0.75, dummy.opacity());
- controller->animate(2.25);
- controller->updateState(events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0.25, dummy.opacity());
- controller->animate(2.75);
- controller->updateState(events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0.75, dummy.opacity());
- controller->animate(3);
- controller->updateState(events.get());
- EXPECT_FALSE(controller->hasActiveAnimation());
- EXPECT_EQ(1, dummy.opacity());
-
- // Just be extra sure.
- controller->animate(4);
- controller->updateState(events.get());
- EXPECT_EQ(1, dummy.opacity());
+TEST(LayerAnimationControllerTest, TrivialLooping) {
+ scoped_ptr<AnimationEventsVector> events(
+ make_scoped_ptr(new AnimationEventsVector));
+ FakeLayerAnimationValueObserver dummy;
+ scoped_refptr<LayerAnimationController> controller(
+ LayerAnimationController::Create(0));
+ controller->AddObserver(&dummy);
+
+ scoped_ptr<Animation> to_add(CreateAnimation(
+ scoped_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)).Pass(),
+ 1,
+ Animation::Opacity));
+ to_add->set_iterations(3);
+ controller->AddAnimation(to_add.Pass());
+
+ controller->Animate(0.0);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(0.f, dummy.opacity());
+ controller->Animate(1.25);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(0.25f, dummy.opacity());
+ controller->Animate(1.75);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(0.75f, dummy.opacity());
+ controller->Animate(2.25);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(0.25f, dummy.opacity());
+ controller->Animate(2.75);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(0.75f, dummy.opacity());
+ controller->Animate(3.0);
+ controller->UpdateState(events.get());
+ EXPECT_FALSE(controller->HasActiveAnimation());
+ EXPECT_EQ(1.f, dummy.opacity());
+
+ // Just be extra sure.
+ controller->Animate(4.0);
+ controller->UpdateState(events.get());
+ EXPECT_EQ(1.f, dummy.opacity());
}
// Test that an infinitely looping animation does indeed go until aborted.
-TEST(LayerAnimationControllerTest, InfiniteLooping)
-{
- scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEventsVector));
- FakeLayerAnimationValueObserver dummy;
- scoped_refptr<LayerAnimationController> controller(LayerAnimationController::create(0));
- controller->addObserver(&dummy);
-
- const int id = 1;
- scoped_ptr<Animation> toAdd(createAnimation(make_scoped_ptr(new FakeFloatTransition(1, 0, 1)).PassAs<AnimationCurve>(), id, Animation::Opacity));
- toAdd->setIterations(-1);
- controller->addAnimation(toAdd.Pass());
-
- controller->animate(0);
- controller->updateState(events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0, dummy.opacity());
- controller->animate(1.25);
- controller->updateState(events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0.25, dummy.opacity());
- controller->animate(1.75);
- controller->updateState(events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0.75, dummy.opacity());
-
- controller->animate(1073741824.25);
- controller->updateState(events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0.25, dummy.opacity());
- controller->animate(1073741824.75);
- controller->updateState(events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0.75, dummy.opacity());
-
- EXPECT_TRUE(controller->getAnimation(id, Animation::Opacity));
- controller->getAnimation(id, Animation::Opacity)->setRunState(Animation::Aborted, 0.75);
- EXPECT_FALSE(controller->hasActiveAnimation());
- EXPECT_EQ(0.75, dummy.opacity());
+TEST(LayerAnimationControllerTest, InfiniteLooping) {
+ scoped_ptr<AnimationEventsVector> events(
+ make_scoped_ptr(new AnimationEventsVector));
+ FakeLayerAnimationValueObserver dummy;
+ scoped_refptr<LayerAnimationController> controller(
+ LayerAnimationController::Create(0));
+ controller->AddObserver(&dummy);
+
+ const int id = 1;
+ scoped_ptr<Animation> to_add(CreateAnimation(
+ scoped_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)).Pass(),
+ id,
+ Animation::Opacity));
+ to_add->set_iterations(-1);
+ controller->AddAnimation(to_add.Pass());
+
+ controller->Animate(0.0);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(0.f, dummy.opacity());
+ controller->Animate(1.25);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(0.25f, dummy.opacity());
+ controller->Animate(1.75);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(0.75f, dummy.opacity());
+
+ controller->Animate(1073741824.25);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(0.25f, dummy.opacity());
+ controller->Animate(1073741824.75);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(0.75f, dummy.opacity());
+
+ EXPECT_TRUE(controller->GetAnimation(id, Animation::Opacity));
+ controller->GetAnimation(id, Animation::Opacity)->SetRunState(
+ Animation::Aborted, 0.75);
+ EXPECT_FALSE(controller->HasActiveAnimation());
+ EXPECT_EQ(0.75f, dummy.opacity());
}
// Test that pausing and resuming work as expected.
-TEST(LayerAnimationControllerTest, PauseResume)
-{
- scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEventsVector));
- FakeLayerAnimationValueObserver dummy;
- scoped_refptr<LayerAnimationController> controller(LayerAnimationController::create(0));
- controller->addObserver(&dummy);
-
- const int id = 1;
- controller->addAnimation(createAnimation(make_scoped_ptr(new FakeFloatTransition(1, 0, 1)).PassAs<AnimationCurve>(), id, Animation::Opacity));
-
- controller->animate(0);
- controller->updateState(events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0, dummy.opacity());
- controller->animate(0.5);
- controller->updateState(events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0.5, dummy.opacity());
-
- EXPECT_TRUE(controller->getAnimation(id, Animation::Opacity));
- controller->getAnimation(id, Animation::Opacity)->setRunState(Animation::Paused, 0.5);
-
- controller->animate(1024);
- controller->updateState(events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0.5, dummy.opacity());
-
- EXPECT_TRUE(controller->getAnimation(id, Animation::Opacity));
- controller->getAnimation(id, Animation::Opacity)->setRunState(Animation::Running, 1024);
-
- controller->animate(1024.25);
- controller->updateState(events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0.75, dummy.opacity());
- controller->animate(1024.5);
- controller->updateState(events.get());
- EXPECT_FALSE(controller->hasActiveAnimation());
- EXPECT_EQ(1, dummy.opacity());
+TEST(LayerAnimationControllerTest, PauseResume) {
+ scoped_ptr<AnimationEventsVector> events(
+ make_scoped_ptr(new AnimationEventsVector));
+ FakeLayerAnimationValueObserver dummy;
+ scoped_refptr<LayerAnimationController> controller(
+ LayerAnimationController::Create(0));
+ controller->AddObserver(&dummy);
+
+ const int id = 1;
+ controller->AddAnimation(CreateAnimation(
+ scoped_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)).Pass(),
+ id,
+ Animation::Opacity));
+
+ controller->Animate(0.0);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(0.f, dummy.opacity());
+ controller->Animate(0.5);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(0.5f, dummy.opacity());
+
+ EXPECT_TRUE(controller->GetAnimation(id, Animation::Opacity));
+ controller->GetAnimation(id, Animation::Opacity)->SetRunState(
+ Animation::Paused, 0.5);
+
+ controller->Animate(1024);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(0.5f, dummy.opacity());
+
+ EXPECT_TRUE(controller->GetAnimation(id, Animation::Opacity));
+ controller->GetAnimation(id, Animation::Opacity)->SetRunState(
+ Animation::Running, 1024);
+
+ controller->Animate(1024.25);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(0.75f, dummy.opacity());
+ controller->Animate(1024.5);
+ controller->UpdateState(events.get());
+ EXPECT_FALSE(controller->HasActiveAnimation());
+ EXPECT_EQ(1.f, dummy.opacity());
}
-TEST(LayerAnimationControllerTest, AbortAGroupedAnimation)
-{
- scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEventsVector));
- FakeLayerAnimationValueObserver dummy;
- scoped_refptr<LayerAnimationController> controller(LayerAnimationController::create(0));
- controller->addObserver(&dummy);
-
- const int id = 1;
- controller->addAnimation(createAnimation(make_scoped_ptr(new FakeTransformTransition(1)).PassAs<AnimationCurve>(), id, Animation::Transform));
- controller->addAnimation(createAnimation(make_scoped_ptr(new FakeFloatTransition(2, 0, 1)).PassAs<AnimationCurve>(), id, Animation::Opacity));
- controller->addAnimation(createAnimation(make_scoped_ptr(new FakeFloatTransition(1, 1, 0.75)).PassAs<AnimationCurve>(), 2, Animation::Opacity));
-
- controller->animate(0);
- controller->updateState(events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0, dummy.opacity());
- controller->animate(1);
- controller->updateState(events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0.5, dummy.opacity());
-
- EXPECT_TRUE(controller->getAnimation(id, Animation::Opacity));
- controller->getAnimation(id, Animation::Opacity)->setRunState(Animation::Aborted, 1);
- controller->animate(1);
- controller->updateState(events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(1, dummy.opacity());
- controller->animate(2);
- controller->updateState(events.get());
- EXPECT_TRUE(!controller->hasActiveAnimation());
- EXPECT_EQ(0.75, dummy.opacity());
+TEST(LayerAnimationControllerTest, AbortAGroupedAnimation) {
+ scoped_ptr<AnimationEventsVector> events(
+ make_scoped_ptr(new AnimationEventsVector));
+ FakeLayerAnimationValueObserver dummy;
+ scoped_refptr<LayerAnimationController> controller(
+ LayerAnimationController::Create(0));
+ controller->AddObserver(&dummy);
+
+ const int id = 1;
+ controller->AddAnimation(CreateAnimation(
+ scoped_ptr<AnimationCurve>(new FakeTransformTransition(1)).Pass(),
+ id,
+ Animation::Transform));
+ controller->AddAnimation(CreateAnimation(
+ scoped_ptr<AnimationCurve>(new FakeFloatTransition(2.0, 0.f, 1.f)).Pass(),
+ id,
+ Animation::Opacity));
+ controller->AddAnimation(CreateAnimation(
+ scoped_ptr<AnimationCurve>(
+ new FakeFloatTransition(1.0, 1.f, 0.75f)).Pass(),
+ 2,
+ Animation::Opacity));
+
+ controller->Animate(0.0);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(0.f, dummy.opacity());
+ controller->Animate(1.0);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(0.5f, dummy.opacity());
+
+ EXPECT_TRUE(controller->GetAnimation(id, Animation::Opacity));
+ controller->GetAnimation(id, Animation::Opacity)->SetRunState(
+ Animation::Aborted, 1);
+ controller->Animate(1.0);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(1.f, dummy.opacity());
+ controller->Animate(2.0);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(!controller->HasActiveAnimation());
+ EXPECT_EQ(0.75f, dummy.opacity());
}
-TEST(LayerAnimationControllerTest, ForceSyncWhenSynchronizedStartTimeNeeded)
-{
- FakeLayerAnimationValueObserver dummyImpl;
- scoped_refptr<LayerAnimationController> controllerImpl(LayerAnimationController::create(0));
- controllerImpl->addObserver(&dummyImpl);
- scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEventsVector));
- FakeLayerAnimationValueObserver dummy;
- scoped_refptr<LayerAnimationController> controller(LayerAnimationController::create(0));
- controller->addObserver(&dummy);
-
- scoped_ptr<Animation> toAdd(createAnimation(make_scoped_ptr(new FakeFloatTransition(2, 0, 1)).PassAs<AnimationCurve>(), 0, Animation::Opacity));
- toAdd->setNeedsSynchronizedStartTime(true);
- controller->addAnimation(toAdd.Pass());
-
- controller->animate(0);
- controller->updateState(events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- Animation* activeAnimation = controller->getAnimation(0, Animation::Opacity);
- EXPECT_TRUE(activeAnimation);
- EXPECT_TRUE(activeAnimation->needsSynchronizedStartTime());
-
- controller->setForceSync();
-
- controller->pushAnimationUpdatesTo(controllerImpl.get());
-
- activeAnimation = controllerImpl->getAnimation(0, Animation::Opacity);
- EXPECT_TRUE(activeAnimation);
- EXPECT_EQ(Animation::WaitingForTargetAvailability, activeAnimation->runState());
+TEST(LayerAnimationControllerTest, ForceSyncWhenSynchronizedStartTimeNeeded) {
+ FakeLayerAnimationValueObserver dummy_impl;
+ scoped_refptr<LayerAnimationController> controller_impl(
+ LayerAnimationController::Create(0));
+ controller_impl->AddObserver(&dummy_impl);
+ scoped_ptr<AnimationEventsVector> events(
+ make_scoped_ptr(new AnimationEventsVector));
+ FakeLayerAnimationValueObserver dummy;
+ scoped_refptr<LayerAnimationController> controller(
+ LayerAnimationController::Create(0));
+ controller->AddObserver(&dummy);
+
+ scoped_ptr<Animation> to_add(CreateAnimation(
+ scoped_ptr<AnimationCurve>(new FakeFloatTransition(2.0, 0.f, 1.f)).Pass(),
+ 0,
+ Animation::Opacity));
+ to_add->set_needs_synchronized_start_time(true);
+ controller->AddAnimation(to_add.Pass());
+
+ controller->Animate(0.0);
+ controller->UpdateState(events.get());
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ Animation* active_animation = controller->GetAnimation(0, Animation::Opacity);
+ EXPECT_TRUE(active_animation);
+ EXPECT_TRUE(active_animation->needs_synchronized_start_time());
+
+ controller->set_force_sync();
+
+ controller->PushAnimationUpdatesTo(controller_impl.get());
+
+ active_animation = controller_impl->GetAnimation(0, Animation::Opacity);
+ EXPECT_TRUE(active_animation);
+ EXPECT_EQ(Animation::WaitingForTargetAvailability,
+ active_animation->run_state());
}
// Tests that skipping a call to updateState works as expected.
-TEST(LayerAnimationControllerTest, SkipUpdateState)
-{
- scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEventsVector));
- FakeLayerAnimationValueObserver dummy;
- scoped_refptr<LayerAnimationController> controller(LayerAnimationController::create(0));
- controller->addObserver(&dummy);
-
- controller->addAnimation(createAnimation(make_scoped_ptr(new FakeTransformTransition(1)).PassAs<AnimationCurve>(), 1, Animation::Transform));
-
- controller->animate(0);
- controller->updateState(events.get());
-
- controller->addAnimation(createAnimation(make_scoped_ptr(new FakeFloatTransition(1, 0, 1)).PassAs<AnimationCurve>(), 2, Animation::Opacity));
-
- // Animate but don't updateState.
- controller->animate(1);
-
- controller->animate(2);
- events.reset(new AnimationEventsVector);
- controller->updateState(events.get());
-
- // Should have one Started event and one Finished event.
- EXPECT_EQ(2, events->size());
- EXPECT_NE((*events)[0].type, (*events)[1].type);
-
- // The float transition should still be at its starting point.
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0, dummy.opacity());
-
- controller->animate(3);
- controller->updateState(events.get());
-
- // The float tranisition should now be done.
- EXPECT_EQ(1, dummy.opacity());
- EXPECT_FALSE(controller->hasActiveAnimation());
+TEST(LayerAnimationControllerTest, SkipUpdateState) {
+ scoped_ptr<AnimationEventsVector> events(
+ make_scoped_ptr(new AnimationEventsVector));
+ FakeLayerAnimationValueObserver dummy;
+ scoped_refptr<LayerAnimationController> controller(
+ LayerAnimationController::Create(0));
+ controller->AddObserver(&dummy);
+
+ controller->AddAnimation(CreateAnimation(
+ scoped_ptr<AnimationCurve>(new FakeTransformTransition(1)).Pass(),
+ 1,
+ Animation::Transform));
+
+ controller->Animate(0.0);
+ controller->UpdateState(events.get());
+
+ controller->AddAnimation(CreateAnimation(
+ scoped_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)).Pass(),
+ 2,
+ Animation::Opacity));
+
+ // Animate but don't updateState.
+ controller->Animate(1.0);
+
+ controller->Animate(2.0);
+ events.reset(new AnimationEventsVector);
+ controller->UpdateState(events.get());
+
+ // Should have one Started event and one Finished event.
+ EXPECT_EQ(2, events->size());
+ EXPECT_NE((*events)[0].type, (*events)[1].type);
+
+ // The float transition should still be at its starting point.
+ EXPECT_TRUE(controller->HasActiveAnimation());
+ EXPECT_EQ(0.f, dummy.opacity());
+
+ controller->Animate(3.0);
+ controller->UpdateState(events.get());
+
+ // The float tranisition should now be done.
+ EXPECT_EQ(1.f, dummy.opacity());
+ EXPECT_FALSE(controller->HasActiveAnimation());
}
} // namespace
« no previous file with comments | « cc/layer_animation_controller.cc ('k') | cc/layer_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698