| OLD | NEW |
| 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/animation/layer_animation_controller.h" | 5 #include "cc/animation/layer_animation_controller.h" |
| 6 | 6 |
| 7 #include "cc/animation/animation.h" | 7 #include "cc/animation/animation.h" |
| 8 #include "cc/animation/animation_curve.h" | 8 #include "cc/animation/animation_curve.h" |
| 9 #include "cc/animation/animation_delegate.h" | 9 #include "cc/animation/animation_delegate.h" |
| 10 #include "cc/animation/animation_registrar.h" | 10 #include "cc/animation/animation_registrar.h" |
| (...skipping 16 matching lines...) Expand all Loading... |
| 27 return base::TimeTicks::FromInternalValue(seconds * | 27 return base::TimeTicks::FromInternalValue(seconds * |
| 28 base::Time::kMicrosecondsPerSecond); | 28 base::Time::kMicrosecondsPerSecond); |
| 29 } | 29 } |
| 30 | 30 |
| 31 // A LayerAnimationController cannot be ticked at 0.0, since an animation | 31 // A LayerAnimationController cannot be ticked at 0.0, since an animation |
| 32 // with start time 0.0 is treated as an animation whose start time has | 32 // with start time 0.0 is treated as an animation whose start time has |
| 33 // not yet been set. | 33 // not yet been set. |
| 34 const TimeTicks kInitialTickTime = TicksFromSecondsF(1.0); | 34 const TimeTicks kInitialTickTime = TicksFromSecondsF(1.0); |
| 35 | 35 |
| 36 scoped_ptr<Animation> CreateAnimation(scoped_ptr<AnimationCurve> curve, | 36 scoped_ptr<Animation> CreateAnimation(scoped_ptr<AnimationCurve> curve, |
| 37 int id, | 37 int group_id, |
| 38 Animation::TargetProperty property) { | 38 Animation::TargetProperty property) { |
| 39 return Animation::Create(curve.Pass(), 0, id, property); | 39 return Animation::Create(curve.Pass(), 0, group_id, property); |
| 40 } | 40 } |
| 41 | 41 |
| 42 TEST(LayerAnimationControllerTest, SyncNewAnimation) { | 42 TEST(LayerAnimationControllerTest, SyncNewAnimation) { |
| 43 FakeLayerAnimationValueObserver dummy_impl; | 43 FakeLayerAnimationValueObserver dummy_impl; |
| 44 scoped_refptr<LayerAnimationController> controller_impl( | 44 scoped_refptr<LayerAnimationController> controller_impl( |
| 45 LayerAnimationController::Create(0)); | 45 LayerAnimationController::Create(0)); |
| 46 controller_impl->AddValueObserver(&dummy_impl); | 46 controller_impl->AddValueObserver(&dummy_impl); |
| 47 FakeLayerAnimationValueObserver dummy; | 47 FakeLayerAnimationValueObserver dummy; |
| 48 scoped_refptr<LayerAnimationController> controller( | 48 scoped_refptr<LayerAnimationController> controller( |
| 49 LayerAnimationController::Create(0)); | 49 LayerAnimationController::Create(0)); |
| 50 controller->AddValueObserver(&dummy); | 50 controller->AddValueObserver(&dummy); |
| 51 | 51 |
| 52 EXPECT_FALSE(controller_impl->GetAnimation(Animation::Opacity)); | 52 EXPECT_FALSE(controller_impl->GetAnimation(Animation::Opacity)); |
| 53 | 53 |
| 54 EXPECT_FALSE(controller->needs_to_start_animations_for_testing()); | 54 EXPECT_FALSE(controller->needs_to_start_animations_for_testing()); |
| 55 EXPECT_FALSE(controller_impl->needs_to_start_animations_for_testing()); | 55 EXPECT_FALSE(controller_impl->needs_to_start_animations_for_testing()); |
| 56 | 56 |
| 57 AddOpacityTransitionToController(controller.get(), 1, 0, 1, false); | 57 int animation_id = |
| 58 AddOpacityTransitionToController(controller.get(), 1, 0, 1, false); |
| 58 EXPECT_TRUE(controller->needs_to_start_animations_for_testing()); | 59 EXPECT_TRUE(controller->needs_to_start_animations_for_testing()); |
| 59 int group_id = controller->GetAnimation(Animation::Opacity)->group(); | |
| 60 | 60 |
| 61 controller->PushAnimationUpdatesTo(controller_impl.get()); | 61 controller->PushAnimationUpdatesTo(controller_impl.get()); |
| 62 EXPECT_TRUE(controller_impl->needs_to_start_animations_for_testing()); | 62 EXPECT_TRUE(controller_impl->needs_to_start_animations_for_testing()); |
| 63 controller_impl->ActivateAnimations(); | 63 controller_impl->ActivateAnimations(); |
| 64 | 64 |
| 65 EXPECT_TRUE(controller_impl->GetAnimation(group_id, Animation::Opacity)); | 65 EXPECT_TRUE(controller_impl->GetAnimationById(animation_id)); |
| 66 EXPECT_EQ(Animation::WaitingForTargetAvailability, | 66 EXPECT_EQ(Animation::WaitingForTargetAvailability, |
| 67 controller_impl->GetAnimation(group_id, | 67 controller_impl->GetAnimationById(animation_id)->run_state()); |
| 68 Animation::Opacity)->run_state()); | |
| 69 } | 68 } |
| 70 | 69 |
| 71 // If an animation is started on the impl thread before it is ticked on the main | 70 // If an animation is started on the impl thread before it is ticked on the main |
| 72 // thread, we must be sure to respect the synchronized start time. | 71 // thread, we must be sure to respect the synchronized start time. |
| 73 TEST(LayerAnimationControllerTest, DoNotClobberStartTimes) { | 72 TEST(LayerAnimationControllerTest, DoNotClobberStartTimes) { |
| 74 FakeLayerAnimationValueObserver dummy_impl; | 73 FakeLayerAnimationValueObserver dummy_impl; |
| 75 scoped_refptr<LayerAnimationController> controller_impl( | 74 scoped_refptr<LayerAnimationController> controller_impl( |
| 76 LayerAnimationController::Create(0)); | 75 LayerAnimationController::Create(0)); |
| 77 controller_impl->AddValueObserver(&dummy_impl); | 76 controller_impl->AddValueObserver(&dummy_impl); |
| 78 FakeLayerAnimationValueObserver dummy; | 77 FakeLayerAnimationValueObserver dummy; |
| 79 scoped_refptr<LayerAnimationController> controller( | 78 scoped_refptr<LayerAnimationController> controller( |
| 80 LayerAnimationController::Create(0)); | 79 LayerAnimationController::Create(0)); |
| 81 controller->AddValueObserver(&dummy); | 80 controller->AddValueObserver(&dummy); |
| 82 | 81 |
| 83 EXPECT_FALSE(controller_impl->GetAnimation(Animation::Opacity)); | 82 EXPECT_FALSE(controller_impl->GetAnimation(Animation::Opacity)); |
| 84 | 83 |
| 85 AddOpacityTransitionToController(controller.get(), 1, 0, 1, false); | 84 int animation_id = |
| 86 int group_id = controller->GetAnimation(Animation::Opacity)->group(); | 85 AddOpacityTransitionToController(controller.get(), 1, 0, 1, false); |
| 87 | 86 |
| 88 controller->PushAnimationUpdatesTo(controller_impl.get()); | 87 controller->PushAnimationUpdatesTo(controller_impl.get()); |
| 89 controller_impl->ActivateAnimations(); | 88 controller_impl->ActivateAnimations(); |
| 90 | 89 |
| 91 EXPECT_TRUE(controller_impl->GetAnimation(group_id, Animation::Opacity)); | 90 EXPECT_TRUE(controller_impl->GetAnimationById(animation_id)); |
| 92 EXPECT_EQ(Animation::WaitingForTargetAvailability, | 91 EXPECT_EQ(Animation::WaitingForTargetAvailability, |
| 93 controller_impl->GetAnimation(group_id, | 92 controller_impl->GetAnimationById(animation_id)->run_state()); |
| 94 Animation::Opacity)->run_state()); | |
| 95 | 93 |
| 96 AnimationEventsVector events; | 94 AnimationEventsVector events; |
| 97 controller_impl->Animate(kInitialTickTime); | 95 controller_impl->Animate(kInitialTickTime); |
| 98 controller_impl->UpdateState(true, &events); | 96 controller_impl->UpdateState(true, &events); |
| 99 | 97 |
| 100 // Synchronize the start times. | 98 // Synchronize the start times. |
| 101 EXPECT_EQ(1u, events.size()); | 99 EXPECT_EQ(1u, events.size()); |
| 102 controller->NotifyAnimationStarted(events[0]); | 100 controller->NotifyAnimationStarted(events[0]); |
| 103 EXPECT_EQ(controller->GetAnimation(group_id, | 101 EXPECT_EQ(controller->GetAnimationById(animation_id)->start_time(), |
| 104 Animation::Opacity)->start_time(), | 102 controller_impl->GetAnimationById(animation_id)->start_time()); |
| 105 controller_impl->GetAnimation(group_id, | |
| 106 Animation::Opacity)->start_time()); | |
| 107 | 103 |
| 108 // Start the animation on the main thread. Should not affect the start time. | 104 // Start the animation on the main thread. Should not affect the start time. |
| 109 controller->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(500)); | 105 controller->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(500)); |
| 110 controller->UpdateState(true, nullptr); | 106 controller->UpdateState(true, nullptr); |
| 111 EXPECT_EQ(controller->GetAnimation(group_id, | 107 EXPECT_EQ(controller->GetAnimationById(animation_id)->start_time(), |
| 112 Animation::Opacity)->start_time(), | 108 controller_impl->GetAnimationById(animation_id)->start_time()); |
| 113 controller_impl->GetAnimation(group_id, | |
| 114 Animation::Opacity)->start_time()); | |
| 115 } | 109 } |
| 116 | 110 |
| 117 TEST(LayerAnimationControllerTest, UseSpecifiedStartTimes) { | 111 TEST(LayerAnimationControllerTest, UseSpecifiedStartTimes) { |
| 118 FakeLayerAnimationValueObserver dummy_impl; | 112 FakeLayerAnimationValueObserver dummy_impl; |
| 119 scoped_refptr<LayerAnimationController> controller_impl( | 113 scoped_refptr<LayerAnimationController> controller_impl( |
| 120 LayerAnimationController::Create(0)); | 114 LayerAnimationController::Create(0)); |
| 121 controller_impl->AddValueObserver(&dummy_impl); | 115 controller_impl->AddValueObserver(&dummy_impl); |
| 122 FakeLayerAnimationValueObserver dummy; | 116 FakeLayerAnimationValueObserver dummy; |
| 123 scoped_refptr<LayerAnimationController> controller( | 117 scoped_refptr<LayerAnimationController> controller( |
| 124 LayerAnimationController::Create(0)); | 118 LayerAnimationController::Create(0)); |
| 125 controller->AddValueObserver(&dummy); | 119 controller->AddValueObserver(&dummy); |
| 126 | 120 |
| 127 AddOpacityTransitionToController(controller.get(), 1, 0, 1, false); | 121 int animation_id = |
| 128 int group_id = controller->GetAnimation(Animation::Opacity)->group(); | 122 AddOpacityTransitionToController(controller.get(), 1, 0, 1, false); |
| 129 | 123 |
| 130 const TimeTicks start_time = TicksFromSecondsF(123); | 124 const TimeTicks start_time = TicksFromSecondsF(123); |
| 131 controller->GetAnimation(Animation::Opacity)->set_start_time(start_time); | 125 controller->GetAnimation(Animation::Opacity)->set_start_time(start_time); |
| 132 | 126 |
| 133 controller->PushAnimationUpdatesTo(controller_impl.get()); | 127 controller->PushAnimationUpdatesTo(controller_impl.get()); |
| 134 controller_impl->ActivateAnimations(); | 128 controller_impl->ActivateAnimations(); |
| 135 | 129 |
| 136 EXPECT_TRUE(controller_impl->GetAnimation(group_id, Animation::Opacity)); | 130 EXPECT_TRUE(controller_impl->GetAnimationById(animation_id)); |
| 137 EXPECT_EQ(Animation::WaitingForTargetAvailability, | 131 EXPECT_EQ(Animation::WaitingForTargetAvailability, |
| 138 controller_impl->GetAnimation(group_id, | 132 controller_impl->GetAnimationById(animation_id)->run_state()); |
| 139 Animation::Opacity)->run_state()); | |
| 140 | 133 |
| 141 AnimationEventsVector events; | 134 AnimationEventsVector events; |
| 142 controller_impl->Animate(kInitialTickTime); | 135 controller_impl->Animate(kInitialTickTime); |
| 143 controller_impl->UpdateState(true, &events); | 136 controller_impl->UpdateState(true, &events); |
| 144 | 137 |
| 145 // Synchronize the start times. | 138 // Synchronize the start times. |
| 146 EXPECT_EQ(1u, events.size()); | 139 EXPECT_EQ(1u, events.size()); |
| 147 controller->NotifyAnimationStarted(events[0]); | 140 controller->NotifyAnimationStarted(events[0]); |
| 148 | 141 |
| 149 EXPECT_EQ(start_time, | 142 EXPECT_EQ(start_time, |
| 150 controller->GetAnimation(group_id, | 143 controller->GetAnimationById(animation_id)->start_time()); |
| 151 Animation::Opacity)->start_time()); | 144 EXPECT_EQ(controller->GetAnimationById(animation_id)->start_time(), |
| 152 EXPECT_EQ(controller->GetAnimation(group_id, | 145 controller_impl->GetAnimationById(animation_id)->start_time()); |
| 153 Animation::Opacity)->start_time(), | |
| 154 controller_impl->GetAnimation(group_id, | |
| 155 Animation::Opacity)->start_time()); | |
| 156 | 146 |
| 157 // Start the animation on the main thread. Should not affect the start time. | 147 // Start the animation on the main thread. Should not affect the start time. |
| 158 controller->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(500)); | 148 controller->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(500)); |
| 159 controller->UpdateState(true, nullptr); | 149 controller->UpdateState(true, nullptr); |
| 160 EXPECT_EQ(start_time, | 150 EXPECT_EQ(start_time, |
| 161 controller->GetAnimation(group_id, | 151 controller->GetAnimationById(animation_id)->start_time()); |
| 162 Animation::Opacity)->start_time()); | 152 EXPECT_EQ(controller->GetAnimationById(animation_id)->start_time(), |
| 163 EXPECT_EQ(controller->GetAnimation(group_id, | 153 controller_impl->GetAnimationById(animation_id)->start_time()); |
| 164 Animation::Opacity)->start_time(), | |
| 165 controller_impl->GetAnimation(group_id, | |
| 166 Animation::Opacity)->start_time()); | |
| 167 } | 154 } |
| 168 | 155 |
| 169 // Tests that controllers activate and deactivate as expected. | 156 // Tests that controllers activate and deactivate as expected. |
| 170 TEST(LayerAnimationControllerTest, Activation) { | 157 TEST(LayerAnimationControllerTest, Activation) { |
| 171 scoped_ptr<AnimationRegistrar> registrar = AnimationRegistrar::Create(); | 158 scoped_ptr<AnimationRegistrar> registrar = AnimationRegistrar::Create(); |
| 172 scoped_ptr<AnimationRegistrar> registrar_impl = AnimationRegistrar::Create(); | 159 scoped_ptr<AnimationRegistrar> registrar_impl = AnimationRegistrar::Create(); |
| 173 | 160 |
| 174 FakeLayerAnimationValueObserver dummy_impl; | 161 FakeLayerAnimationValueObserver dummy_impl; |
| 175 scoped_refptr<LayerAnimationController> controller_impl( | 162 scoped_refptr<LayerAnimationController> controller_impl( |
| 176 LayerAnimationController::Create(0)); | 163 LayerAnimationController::Create(0)); |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 255 scoped_refptr<LayerAnimationController> controller_impl( | 242 scoped_refptr<LayerAnimationController> controller_impl( |
| 256 LayerAnimationController::Create(0)); | 243 LayerAnimationController::Create(0)); |
| 257 controller_impl->AddValueObserver(&dummy_impl); | 244 controller_impl->AddValueObserver(&dummy_impl); |
| 258 FakeLayerAnimationValueObserver dummy; | 245 FakeLayerAnimationValueObserver dummy; |
| 259 scoped_refptr<LayerAnimationController> controller( | 246 scoped_refptr<LayerAnimationController> controller( |
| 260 LayerAnimationController::Create(0)); | 247 LayerAnimationController::Create(0)); |
| 261 controller->AddValueObserver(&dummy); | 248 controller->AddValueObserver(&dummy); |
| 262 | 249 |
| 263 EXPECT_FALSE(controller_impl->GetAnimation(Animation::Opacity)); | 250 EXPECT_FALSE(controller_impl->GetAnimation(Animation::Opacity)); |
| 264 | 251 |
| 265 AddOpacityTransitionToController(controller.get(), 1, 0, 1, false); | 252 int animation_id = |
| 266 int group_id = controller->GetAnimation(Animation::Opacity)->group(); | 253 AddOpacityTransitionToController(controller.get(), 1, 0, 1, false); |
| 267 int animation_id = controller->GetAnimation(Animation::Opacity)->id(); | |
| 268 | 254 |
| 269 controller->PushAnimationUpdatesTo(controller_impl.get()); | 255 controller->PushAnimationUpdatesTo(controller_impl.get()); |
| 270 controller_impl->ActivateAnimations(); | 256 controller_impl->ActivateAnimations(); |
| 271 | 257 |
| 272 EXPECT_TRUE(controller_impl->GetAnimation(group_id, Animation::Opacity)); | 258 EXPECT_TRUE(controller_impl->GetAnimationById(animation_id)); |
| 273 EXPECT_EQ(Animation::WaitingForTargetAvailability, | 259 EXPECT_EQ(Animation::WaitingForTargetAvailability, |
| 274 controller_impl->GetAnimation(group_id, | 260 controller_impl->GetAnimationById(animation_id)->run_state()); |
| 275 Animation::Opacity)->run_state()); | |
| 276 | 261 |
| 277 // Start the animations on each controller. | 262 // Start the animations on each controller. |
| 278 AnimationEventsVector events; | 263 AnimationEventsVector events; |
| 279 controller_impl->Animate(kInitialTickTime); | 264 controller_impl->Animate(kInitialTickTime); |
| 280 controller_impl->UpdateState(true, &events); | 265 controller_impl->UpdateState(true, &events); |
| 281 controller->Animate(kInitialTickTime); | 266 controller->Animate(kInitialTickTime); |
| 282 controller->UpdateState(true, nullptr); | 267 controller->UpdateState(true, nullptr); |
| 283 EXPECT_EQ(Animation::Running, | 268 EXPECT_EQ(Animation::Running, |
| 284 controller_impl->GetAnimation(group_id, | 269 controller_impl->GetAnimationById(animation_id)->run_state()); |
| 285 Animation::Opacity)->run_state()); | |
| 286 EXPECT_EQ(Animation::Running, | 270 EXPECT_EQ(Animation::Running, |
| 287 controller->GetAnimation(group_id, | 271 controller->GetAnimationById(animation_id)->run_state()); |
| 288 Animation::Opacity)->run_state()); | |
| 289 | 272 |
| 290 // Pause the main-thread animation. | 273 // Pause the main-thread animation. |
| 291 controller->PauseAnimation( | 274 controller->PauseAnimation( |
| 292 animation_id, | 275 animation_id, |
| 293 TimeDelta::FromMilliseconds(1000) + TimeDelta::FromMilliseconds(1000)); | 276 TimeDelta::FromMilliseconds(1000) + TimeDelta::FromMilliseconds(1000)); |
| 294 EXPECT_EQ(Animation::Paused, | 277 EXPECT_EQ(Animation::Paused, |
| 295 controller->GetAnimation(group_id, | 278 controller->GetAnimationById(animation_id)->run_state()); |
| 296 Animation::Opacity)->run_state()); | |
| 297 | 279 |
| 298 // The pause run state change should make it to the impl thread controller. | 280 // The pause run state change should make it to the impl thread controller. |
| 299 controller->PushAnimationUpdatesTo(controller_impl.get()); | 281 controller->PushAnimationUpdatesTo(controller_impl.get()); |
| 300 controller_impl->ActivateAnimations(); | 282 controller_impl->ActivateAnimations(); |
| 301 EXPECT_EQ(Animation::Paused, | 283 EXPECT_EQ(Animation::Paused, |
| 302 controller_impl->GetAnimation(group_id, | 284 controller_impl->GetAnimationById(animation_id)->run_state()); |
| 303 Animation::Opacity)->run_state()); | |
| 304 } | 285 } |
| 305 | 286 |
| 306 TEST(LayerAnimationControllerTest, DoNotSyncFinishedAnimation) { | 287 TEST(LayerAnimationControllerTest, DoNotSyncFinishedAnimation) { |
| 307 FakeLayerAnimationValueObserver dummy_impl; | 288 FakeLayerAnimationValueObserver dummy_impl; |
| 308 scoped_refptr<LayerAnimationController> controller_impl( | 289 scoped_refptr<LayerAnimationController> controller_impl( |
| 309 LayerAnimationController::Create(0)); | 290 LayerAnimationController::Create(0)); |
| 310 controller_impl->AddValueObserver(&dummy_impl); | 291 controller_impl->AddValueObserver(&dummy_impl); |
| 311 FakeLayerAnimationValueObserver dummy; | 292 FakeLayerAnimationValueObserver dummy; |
| 312 scoped_refptr<LayerAnimationController> controller( | 293 scoped_refptr<LayerAnimationController> controller( |
| 313 LayerAnimationController::Create(0)); | 294 LayerAnimationController::Create(0)); |
| 314 controller->AddValueObserver(&dummy); | 295 controller->AddValueObserver(&dummy); |
| 315 | 296 |
| 316 EXPECT_FALSE(controller_impl->GetAnimation(Animation::Opacity)); | 297 EXPECT_FALSE(controller_impl->GetAnimation(Animation::Opacity)); |
| 317 | 298 |
| 318 int animation_id = | 299 int animation_id = |
| 319 AddOpacityTransitionToController(controller.get(), 1, 0, 1, false); | 300 AddOpacityTransitionToController(controller.get(), 1, 0, 1, false); |
| 320 int group_id = controller->GetAnimation(Animation::Opacity)->group(); | 301 int group_id = controller->GetAnimationById(animation_id)->group(); |
| 321 | 302 |
| 322 controller->PushAnimationUpdatesTo(controller_impl.get()); | 303 controller->PushAnimationUpdatesTo(controller_impl.get()); |
| 323 controller_impl->ActivateAnimations(); | 304 controller_impl->ActivateAnimations(); |
| 324 | 305 |
| 325 EXPECT_TRUE(controller_impl->GetAnimation(group_id, Animation::Opacity)); | 306 EXPECT_TRUE(controller_impl->GetAnimationById(animation_id)); |
| 326 EXPECT_EQ(Animation::WaitingForTargetAvailability, | 307 EXPECT_EQ(Animation::WaitingForTargetAvailability, |
| 327 controller_impl->GetAnimation(group_id, | 308 controller_impl->GetAnimationById(animation_id)->run_state()); |
| 328 Animation::Opacity)->run_state()); | |
| 329 | 309 |
| 330 // Notify main thread controller that the animation has started. | 310 // Notify main thread controller that the animation has started. |
| 331 AnimationEvent animation_started_event(AnimationEvent::Started, | 311 AnimationEvent animation_started_event(AnimationEvent::Started, |
| 332 0, | 312 0, |
| 333 group_id, | 313 group_id, |
| 334 Animation::Opacity, | 314 Animation::Opacity, |
| 335 kInitialTickTime); | 315 kInitialTickTime); |
| 336 controller->NotifyAnimationStarted(animation_started_event); | 316 controller->NotifyAnimationStarted(animation_started_event); |
| 337 | 317 |
| 338 // Force animation to complete on impl thread. | 318 // Force animation to complete on impl thread. |
| 339 controller_impl->RemoveAnimation(animation_id); | 319 controller_impl->RemoveAnimation(animation_id); |
| 340 | 320 |
| 341 EXPECT_FALSE(controller_impl->GetAnimation(group_id, Animation::Opacity)); | 321 EXPECT_FALSE(controller_impl->GetAnimationById(animation_id)); |
| 342 | 322 |
| 343 controller->PushAnimationUpdatesTo(controller_impl.get()); | 323 controller->PushAnimationUpdatesTo(controller_impl.get()); |
| 344 controller_impl->ActivateAnimations(); | 324 controller_impl->ActivateAnimations(); |
| 345 | 325 |
| 346 // Even though the main thread has a 'new' animation, it should not be pushed | 326 // Even though the main thread has a 'new' animation, it should not be pushed |
| 347 // because the animation has already completed on the impl thread. | 327 // because the animation has already completed on the impl thread. |
| 348 EXPECT_FALSE(controller_impl->GetAnimation(group_id, Animation::Opacity)); | 328 EXPECT_FALSE(controller_impl->GetAnimationById(animation_id)); |
| 349 } | 329 } |
| 350 | 330 |
| 351 // Ensure that a finished animation is eventually deleted by both the | 331 // Ensure that a finished animation is eventually deleted by both the |
| 352 // main-thread and the impl-thread controllers. | 332 // main-thread and the impl-thread controllers. |
| 353 TEST(LayerAnimationControllerTest, AnimationsAreDeleted) { | 333 TEST(LayerAnimationControllerTest, AnimationsAreDeleted) { |
| 354 FakeLayerAnimationValueObserver dummy; | 334 FakeLayerAnimationValueObserver dummy; |
| 355 FakeLayerAnimationValueObserver dummy_impl; | 335 FakeLayerAnimationValueObserver dummy_impl; |
| 356 scoped_ptr<AnimationEventsVector> events( | 336 scoped_ptr<AnimationEventsVector> events( |
| 357 make_scoped_ptr(new AnimationEventsVector)); | 337 make_scoped_ptr(new AnimationEventsVector)); |
| 358 scoped_refptr<LayerAnimationController> controller( | 338 scoped_refptr<LayerAnimationController> controller( |
| (...skipping 487 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 846 EXPECT_FALSE(event); | 826 EXPECT_FALSE(event); |
| 847 | 827 |
| 848 controller_impl->Animate(kInitialTickTime + duration); | 828 controller_impl->Animate(kInitialTickTime + duration); |
| 849 controller_impl->UpdateState(true, events.get()); | 829 controller_impl->UpdateState(true, events.get()); |
| 850 EXPECT_VECTOR2DF_EQ(target_value, dummy_impl.scroll_offset()); | 830 EXPECT_VECTOR2DF_EQ(target_value, dummy_impl.scroll_offset()); |
| 851 EXPECT_FALSE(controller_impl->HasActiveAnimation()); | 831 EXPECT_FALSE(controller_impl->HasActiveAnimation()); |
| 852 event = GetMostRecentPropertyUpdateEvent(events.get()); | 832 event = GetMostRecentPropertyUpdateEvent(events.get()); |
| 853 EXPECT_FALSE(event); | 833 EXPECT_FALSE(event); |
| 854 } | 834 } |
| 855 | 835 |
| 836 TEST(LayerAnimationControllerTest, ScrollOffsetRemovalNotifiesObserver) { |
| 837 FakeLayerAnimationValueObserver dummy; |
| 838 scoped_refptr<LayerAnimationController> controller( |
| 839 LayerAnimationController::Create(0)); |
| 840 controller->AddValueObserver(&dummy); |
| 841 |
| 842 // First test the 1-argument version of RemoveAnimation. |
| 843 gfx::ScrollOffset target_value(300.f, 200.f); |
| 844 scoped_ptr<ScrollOffsetAnimationCurve> curve( |
| 845 ScrollOffsetAnimationCurve::Create( |
| 846 target_value, EaseInOutTimingFunction::Create().Pass())); |
| 847 |
| 848 int animation_id = 1; |
| 849 scoped_ptr<Animation> animation(Animation::Create( |
| 850 curve.Pass(), animation_id, 0, Animation::ScrollOffset)); |
| 851 controller->AddAnimation(animation.Pass()); |
| 852 |
| 853 controller->RemoveAnimation(animation_id); |
| 854 EXPECT_TRUE(dummy.scroll_offset_animation_removed()); |
| 855 |
| 856 // Now, test the 2-argument version of RemoveAnimation. |
| 857 dummy.reset_scroll_offset_animation_removed(); |
| 858 curve = ScrollOffsetAnimationCurve::Create( |
| 859 target_value, EaseInOutTimingFunction::Create().Pass()); |
| 860 animation = |
| 861 Animation::Create(curve.Pass(), animation_id, 0, Animation::ScrollOffset); |
| 862 controller->AddAnimation(animation.Pass()); |
| 863 |
| 864 controller->RemoveAnimation(animation_id, Animation::ScrollOffset); |
| 865 EXPECT_TRUE(dummy.scroll_offset_animation_removed()); |
| 866 |
| 867 // Check that removing non-scroll-offset animations does not cause the |
| 868 // observer to get notified. |
| 869 dummy.reset_scroll_offset_animation_removed(); |
| 870 animation_id = AddAnimatedTransformToController(controller.get(), 1.0, 1, 2); |
| 871 controller->RemoveAnimation(animation_id); |
| 872 EXPECT_FALSE(dummy.scroll_offset_animation_removed()); |
| 873 |
| 874 dummy.reset_scroll_offset_animation_removed(); |
| 875 animation_id = |
| 876 AddAnimatedFilterToController(controller.get(), 1.0, 0.1f, 0.2f); |
| 877 controller->RemoveAnimation(animation_id, Animation::Filter); |
| 878 EXPECT_FALSE(dummy.scroll_offset_animation_removed()); |
| 879 } |
| 880 |
| 856 class FakeAnimationDelegate : public AnimationDelegate { | 881 class FakeAnimationDelegate : public AnimationDelegate { |
| 857 public: | 882 public: |
| 858 FakeAnimationDelegate() | 883 FakeAnimationDelegate() |
| 859 : started_(false), | 884 : started_(false), |
| 860 finished_(false) {} | 885 finished_(false) {} |
| 861 | 886 |
| 862 void NotifyAnimationStarted(TimeTicks monotonic_time, | 887 void NotifyAnimationStarted(TimeTicks monotonic_time, |
| 863 Animation::TargetProperty target_property, | 888 Animation::TargetProperty target_property, |
| 864 int group) override { | 889 int group) override { |
| 865 started_ = true; | 890 started_ = true; |
| (...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1181 | 1206 |
| 1182 // Test that an infinitely looping animation does indeed go until aborted. | 1207 // Test that an infinitely looping animation does indeed go until aborted. |
| 1183 TEST(LayerAnimationControllerTest, InfiniteLooping) { | 1208 TEST(LayerAnimationControllerTest, InfiniteLooping) { |
| 1184 scoped_ptr<AnimationEventsVector> events( | 1209 scoped_ptr<AnimationEventsVector> events( |
| 1185 make_scoped_ptr(new AnimationEventsVector)); | 1210 make_scoped_ptr(new AnimationEventsVector)); |
| 1186 FakeLayerAnimationValueObserver dummy; | 1211 FakeLayerAnimationValueObserver dummy; |
| 1187 scoped_refptr<LayerAnimationController> controller( | 1212 scoped_refptr<LayerAnimationController> controller( |
| 1188 LayerAnimationController::Create(0)); | 1213 LayerAnimationController::Create(0)); |
| 1189 controller->AddValueObserver(&dummy); | 1214 controller->AddValueObserver(&dummy); |
| 1190 | 1215 |
| 1191 const int id = 1; | |
| 1192 scoped_ptr<Animation> to_add(CreateAnimation( | 1216 scoped_ptr<Animation> to_add(CreateAnimation( |
| 1193 scoped_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)).Pass(), | 1217 scoped_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)).Pass(), |
| 1194 id, | 1218 1, Animation::Opacity)); |
| 1195 Animation::Opacity)); | |
| 1196 to_add->set_iterations(-1); | 1219 to_add->set_iterations(-1); |
| 1197 controller->AddAnimation(to_add.Pass()); | 1220 controller->AddAnimation(to_add.Pass()); |
| 1198 | 1221 |
| 1199 controller->Animate(kInitialTickTime); | 1222 controller->Animate(kInitialTickTime); |
| 1200 controller->UpdateState(true, events.get()); | 1223 controller->UpdateState(true, events.get()); |
| 1201 EXPECT_TRUE(controller->HasActiveAnimation()); | 1224 EXPECT_TRUE(controller->HasActiveAnimation()); |
| 1202 EXPECT_EQ(0.f, dummy.opacity()); | 1225 EXPECT_EQ(0.f, dummy.opacity()); |
| 1203 controller->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1250)); | 1226 controller->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1250)); |
| 1204 controller->UpdateState(true, events.get()); | 1227 controller->UpdateState(true, events.get()); |
| 1205 EXPECT_TRUE(controller->HasActiveAnimation()); | 1228 EXPECT_TRUE(controller->HasActiveAnimation()); |
| 1206 EXPECT_EQ(0.25f, dummy.opacity()); | 1229 EXPECT_EQ(0.25f, dummy.opacity()); |
| 1207 controller->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1750)); | 1230 controller->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1750)); |
| 1208 controller->UpdateState(true, events.get()); | 1231 controller->UpdateState(true, events.get()); |
| 1209 EXPECT_TRUE(controller->HasActiveAnimation()); | 1232 EXPECT_TRUE(controller->HasActiveAnimation()); |
| 1210 EXPECT_EQ(0.75f, dummy.opacity()); | 1233 EXPECT_EQ(0.75f, dummy.opacity()); |
| 1211 | 1234 |
| 1212 controller->Animate(kInitialTickTime + | 1235 controller->Animate(kInitialTickTime + |
| 1213 TimeDelta::FromMilliseconds(1073741824250)); | 1236 TimeDelta::FromMilliseconds(1073741824250)); |
| 1214 controller->UpdateState(true, events.get()); | 1237 controller->UpdateState(true, events.get()); |
| 1215 EXPECT_TRUE(controller->HasActiveAnimation()); | 1238 EXPECT_TRUE(controller->HasActiveAnimation()); |
| 1216 EXPECT_EQ(0.25f, dummy.opacity()); | 1239 EXPECT_EQ(0.25f, dummy.opacity()); |
| 1217 controller->Animate(kInitialTickTime + | 1240 controller->Animate(kInitialTickTime + |
| 1218 TimeDelta::FromMilliseconds(1073741824750)); | 1241 TimeDelta::FromMilliseconds(1073741824750)); |
| 1219 controller->UpdateState(true, events.get()); | 1242 controller->UpdateState(true, events.get()); |
| 1220 EXPECT_TRUE(controller->HasActiveAnimation()); | 1243 EXPECT_TRUE(controller->HasActiveAnimation()); |
| 1221 EXPECT_EQ(0.75f, dummy.opacity()); | 1244 EXPECT_EQ(0.75f, dummy.opacity()); |
| 1222 | 1245 |
| 1223 EXPECT_TRUE(controller->GetAnimation(id, Animation::Opacity)); | 1246 EXPECT_TRUE(controller->GetAnimation(Animation::Opacity)); |
| 1224 controller->GetAnimation(id, Animation::Opacity)->SetRunState( | 1247 controller->GetAnimation(Animation::Opacity) |
| 1225 Animation::Aborted, kInitialTickTime + TimeDelta::FromMilliseconds(750)); | 1248 ->SetRunState(Animation::Aborted, |
| 1249 kInitialTickTime + TimeDelta::FromMilliseconds(750)); |
| 1226 EXPECT_FALSE(controller->HasActiveAnimation()); | 1250 EXPECT_FALSE(controller->HasActiveAnimation()); |
| 1227 EXPECT_EQ(0.75f, dummy.opacity()); | 1251 EXPECT_EQ(0.75f, dummy.opacity()); |
| 1228 } | 1252 } |
| 1229 | 1253 |
| 1230 // Test that pausing and resuming work as expected. | 1254 // Test that pausing and resuming work as expected. |
| 1231 TEST(LayerAnimationControllerTest, PauseResume) { | 1255 TEST(LayerAnimationControllerTest, PauseResume) { |
| 1232 scoped_ptr<AnimationEventsVector> events( | 1256 scoped_ptr<AnimationEventsVector> events( |
| 1233 make_scoped_ptr(new AnimationEventsVector)); | 1257 make_scoped_ptr(new AnimationEventsVector)); |
| 1234 FakeLayerAnimationValueObserver dummy; | 1258 FakeLayerAnimationValueObserver dummy; |
| 1235 scoped_refptr<LayerAnimationController> controller( | 1259 scoped_refptr<LayerAnimationController> controller( |
| 1236 LayerAnimationController::Create(0)); | 1260 LayerAnimationController::Create(0)); |
| 1237 controller->AddValueObserver(&dummy); | 1261 controller->AddValueObserver(&dummy); |
| 1238 | 1262 |
| 1239 const int id = 1; | |
| 1240 controller->AddAnimation(CreateAnimation( | 1263 controller->AddAnimation(CreateAnimation( |
| 1241 scoped_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)).Pass(), | 1264 scoped_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)).Pass(), |
| 1242 id, | 1265 1, Animation::Opacity)); |
| 1243 Animation::Opacity)); | |
| 1244 | 1266 |
| 1245 controller->Animate(kInitialTickTime); | 1267 controller->Animate(kInitialTickTime); |
| 1246 controller->UpdateState(true, events.get()); | 1268 controller->UpdateState(true, events.get()); |
| 1247 EXPECT_TRUE(controller->HasActiveAnimation()); | 1269 EXPECT_TRUE(controller->HasActiveAnimation()); |
| 1248 EXPECT_EQ(0.f, dummy.opacity()); | 1270 EXPECT_EQ(0.f, dummy.opacity()); |
| 1249 controller->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(500)); | 1271 controller->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(500)); |
| 1250 controller->UpdateState(true, events.get()); | 1272 controller->UpdateState(true, events.get()); |
| 1251 EXPECT_TRUE(controller->HasActiveAnimation()); | 1273 EXPECT_TRUE(controller->HasActiveAnimation()); |
| 1252 EXPECT_EQ(0.5f, dummy.opacity()); | 1274 EXPECT_EQ(0.5f, dummy.opacity()); |
| 1253 | 1275 |
| 1254 EXPECT_TRUE(controller->GetAnimation(id, Animation::Opacity)); | 1276 EXPECT_TRUE(controller->GetAnimation(Animation::Opacity)); |
| 1255 controller->GetAnimation(id, Animation::Opacity)->SetRunState( | 1277 controller->GetAnimation(Animation::Opacity) |
| 1256 Animation::Paused, kInitialTickTime + TimeDelta::FromMilliseconds(500)); | 1278 ->SetRunState(Animation::Paused, |
| 1279 kInitialTickTime + TimeDelta::FromMilliseconds(500)); |
| 1257 | 1280 |
| 1258 controller->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1024000)); | 1281 controller->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1024000)); |
| 1259 controller->UpdateState(true, events.get()); | 1282 controller->UpdateState(true, events.get()); |
| 1260 EXPECT_TRUE(controller->HasActiveAnimation()); | 1283 EXPECT_TRUE(controller->HasActiveAnimation()); |
| 1261 EXPECT_EQ(0.5f, dummy.opacity()); | 1284 EXPECT_EQ(0.5f, dummy.opacity()); |
| 1262 | 1285 |
| 1263 EXPECT_TRUE(controller->GetAnimation(id, Animation::Opacity)); | 1286 EXPECT_TRUE(controller->GetAnimation(Animation::Opacity)); |
| 1264 controller->GetAnimation(id, Animation::Opacity) | 1287 controller->GetAnimation(Animation::Opacity) |
| 1265 ->SetRunState(Animation::Running, | 1288 ->SetRunState(Animation::Running, |
| 1266 kInitialTickTime + TimeDelta::FromMilliseconds(1024000)); | 1289 kInitialTickTime + TimeDelta::FromMilliseconds(1024000)); |
| 1267 controller->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1024250)); | 1290 controller->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1024250)); |
| 1268 controller->UpdateState(true, events.get()); | 1291 controller->UpdateState(true, events.get()); |
| 1269 EXPECT_TRUE(controller->HasActiveAnimation()); | 1292 EXPECT_TRUE(controller->HasActiveAnimation()); |
| 1270 EXPECT_EQ(0.75f, dummy.opacity()); | 1293 EXPECT_EQ(0.75f, dummy.opacity()); |
| 1271 | 1294 |
| 1272 controller->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1024500)); | 1295 controller->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1024500)); |
| 1273 controller->UpdateState(true, events.get()); | 1296 controller->UpdateState(true, events.get()); |
| 1274 EXPECT_FALSE(controller->HasActiveAnimation()); | 1297 EXPECT_FALSE(controller->HasActiveAnimation()); |
| 1275 EXPECT_EQ(1.f, dummy.opacity()); | 1298 EXPECT_EQ(1.f, dummy.opacity()); |
| 1276 } | 1299 } |
| 1277 | 1300 |
| 1278 TEST(LayerAnimationControllerTest, AbortAGroupedAnimation) { | 1301 TEST(LayerAnimationControllerTest, AbortAGroupedAnimation) { |
| 1279 scoped_ptr<AnimationEventsVector> events( | 1302 scoped_ptr<AnimationEventsVector> events( |
| 1280 make_scoped_ptr(new AnimationEventsVector)); | 1303 make_scoped_ptr(new AnimationEventsVector)); |
| 1281 FakeLayerAnimationValueObserver dummy; | 1304 FakeLayerAnimationValueObserver dummy; |
| 1282 scoped_refptr<LayerAnimationController> controller( | 1305 scoped_refptr<LayerAnimationController> controller( |
| 1283 LayerAnimationController::Create(0)); | 1306 LayerAnimationController::Create(0)); |
| 1284 controller->AddValueObserver(&dummy); | 1307 controller->AddValueObserver(&dummy); |
| 1285 | 1308 |
| 1286 const int id = 1; | 1309 const int animation_id = 2; |
| 1287 controller->AddAnimation(CreateAnimation( | 1310 controller->AddAnimation(Animation::Create( |
| 1288 scoped_ptr<AnimationCurve>(new FakeTransformTransition(1)).Pass(), | 1311 scoped_ptr<AnimationCurve>(new FakeTransformTransition(1)).Pass(), 1, 1, |
| 1289 id, | |
| 1290 Animation::Transform)); | 1312 Animation::Transform)); |
| 1291 controller->AddAnimation(CreateAnimation( | 1313 controller->AddAnimation(Animation::Create( |
| 1292 scoped_ptr<AnimationCurve>(new FakeFloatTransition(2.0, 0.f, 1.f)).Pass(), | 1314 scoped_ptr<AnimationCurve>(new FakeFloatTransition(2.0, 0.f, 1.f)).Pass(), |
| 1293 id, | 1315 animation_id, 1, Animation::Opacity)); |
| 1294 Animation::Opacity)); | 1316 controller->AddAnimation(Animation::Create( |
| 1295 controller->AddAnimation(CreateAnimation( | 1317 scoped_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 1.f, 0.75f)) |
| 1296 scoped_ptr<AnimationCurve>( | 1318 .Pass(), |
| 1297 new FakeFloatTransition(1.0, 1.f, 0.75f)).Pass(), | 1319 3, 2, Animation::Opacity)); |
| 1298 2, | |
| 1299 Animation::Opacity)); | |
| 1300 | 1320 |
| 1301 controller->Animate(kInitialTickTime); | 1321 controller->Animate(kInitialTickTime); |
| 1302 controller->UpdateState(true, events.get()); | 1322 controller->UpdateState(true, events.get()); |
| 1303 EXPECT_TRUE(controller->HasActiveAnimation()); | 1323 EXPECT_TRUE(controller->HasActiveAnimation()); |
| 1304 EXPECT_EQ(0.f, dummy.opacity()); | 1324 EXPECT_EQ(0.f, dummy.opacity()); |
| 1305 controller->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1000)); | 1325 controller->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1000)); |
| 1306 controller->UpdateState(true, events.get()); | 1326 controller->UpdateState(true, events.get()); |
| 1307 EXPECT_TRUE(controller->HasActiveAnimation()); | 1327 EXPECT_TRUE(controller->HasActiveAnimation()); |
| 1308 EXPECT_EQ(0.5f, dummy.opacity()); | 1328 EXPECT_EQ(0.5f, dummy.opacity()); |
| 1309 | 1329 |
| 1310 EXPECT_TRUE(controller->GetAnimation(id, Animation::Opacity)); | 1330 EXPECT_TRUE(controller->GetAnimationById(animation_id)); |
| 1311 controller->GetAnimation(id, Animation::Opacity)->SetRunState( | 1331 controller->GetAnimationById(animation_id) |
| 1312 Animation::Aborted, kInitialTickTime + TimeDelta::FromMilliseconds(1000)); | 1332 ->SetRunState(Animation::Aborted, |
| 1333 kInitialTickTime + TimeDelta::FromMilliseconds(1000)); |
| 1313 controller->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1000)); | 1334 controller->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1000)); |
| 1314 controller->UpdateState(true, events.get()); | 1335 controller->UpdateState(true, events.get()); |
| 1315 EXPECT_TRUE(controller->HasActiveAnimation()); | 1336 EXPECT_TRUE(controller->HasActiveAnimation()); |
| 1316 EXPECT_EQ(1.f, dummy.opacity()); | 1337 EXPECT_EQ(1.f, dummy.opacity()); |
| 1317 controller->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(2000)); | 1338 controller->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(2000)); |
| 1318 controller->UpdateState(true, events.get()); | 1339 controller->UpdateState(true, events.get()); |
| 1319 EXPECT_TRUE(!controller->HasActiveAnimation()); | 1340 EXPECT_TRUE(!controller->HasActiveAnimation()); |
| 1320 EXPECT_EQ(0.75f, dummy.opacity()); | 1341 EXPECT_EQ(0.75f, dummy.opacity()); |
| 1321 } | 1342 } |
| 1322 | 1343 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1335 scoped_ptr<Animation> to_add(CreateAnimation( | 1356 scoped_ptr<Animation> to_add(CreateAnimation( |
| 1336 scoped_ptr<AnimationCurve>(new FakeFloatTransition(2.0, 0.f, 1.f)).Pass(), | 1357 scoped_ptr<AnimationCurve>(new FakeFloatTransition(2.0, 0.f, 1.f)).Pass(), |
| 1337 0, | 1358 0, |
| 1338 Animation::Opacity)); | 1359 Animation::Opacity)); |
| 1339 to_add->set_needs_synchronized_start_time(true); | 1360 to_add->set_needs_synchronized_start_time(true); |
| 1340 controller->AddAnimation(to_add.Pass()); | 1361 controller->AddAnimation(to_add.Pass()); |
| 1341 | 1362 |
| 1342 controller->Animate(kInitialTickTime); | 1363 controller->Animate(kInitialTickTime); |
| 1343 controller->UpdateState(true, events.get()); | 1364 controller->UpdateState(true, events.get()); |
| 1344 EXPECT_TRUE(controller->HasActiveAnimation()); | 1365 EXPECT_TRUE(controller->HasActiveAnimation()); |
| 1345 Animation* active_animation = controller->GetAnimation(0, Animation::Opacity); | 1366 Animation* active_animation = controller->GetAnimation(Animation::Opacity); |
| 1346 EXPECT_TRUE(active_animation); | 1367 EXPECT_TRUE(active_animation); |
| 1347 EXPECT_TRUE(active_animation->needs_synchronized_start_time()); | 1368 EXPECT_TRUE(active_animation->needs_synchronized_start_time()); |
| 1348 | 1369 |
| 1349 controller->PushAnimationUpdatesTo(controller_impl.get()); | 1370 controller->PushAnimationUpdatesTo(controller_impl.get()); |
| 1350 controller_impl->ActivateAnimations(); | 1371 controller_impl->ActivateAnimations(); |
| 1351 | 1372 |
| 1352 active_animation = controller_impl->GetAnimation(0, Animation::Opacity); | 1373 active_animation = controller_impl->GetAnimation(Animation::Opacity); |
| 1353 EXPECT_TRUE(active_animation); | 1374 EXPECT_TRUE(active_animation); |
| 1354 EXPECT_EQ(Animation::WaitingForTargetAvailability, | 1375 EXPECT_EQ(Animation::WaitingForTargetAvailability, |
| 1355 active_animation->run_state()); | 1376 active_animation->run_state()); |
| 1356 } | 1377 } |
| 1357 | 1378 |
| 1358 // Tests that skipping a call to UpdateState works as expected. | 1379 // Tests that skipping a call to UpdateState works as expected. |
| 1359 TEST(LayerAnimationControllerTest, SkipUpdateState) { | 1380 TEST(LayerAnimationControllerTest, SkipUpdateState) { |
| 1360 scoped_ptr<AnimationEventsVector> events( | 1381 scoped_ptr<AnimationEventsVector> events( |
| 1361 make_scoped_ptr(new AnimationEventsVector)); | 1382 make_scoped_ptr(new AnimationEventsVector)); |
| 1362 FakeLayerAnimationValueObserver dummy; | 1383 FakeLayerAnimationValueObserver dummy; |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1415 new FakeFloatTransition(1.0, 0.5f, 1.f)).Pass(), | 1436 new FakeFloatTransition(1.0, 0.5f, 1.f)).Pass(), |
| 1416 id, | 1437 id, |
| 1417 Animation::Opacity)); | 1438 Animation::Opacity)); |
| 1418 | 1439 |
| 1419 // Without an observer, the animation shouldn't progress to the Starting | 1440 // Without an observer, the animation shouldn't progress to the Starting |
| 1420 // state. | 1441 // state. |
| 1421 controller->Animate(kInitialTickTime); | 1442 controller->Animate(kInitialTickTime); |
| 1422 controller->UpdateState(true, events.get()); | 1443 controller->UpdateState(true, events.get()); |
| 1423 EXPECT_EQ(0u, events->size()); | 1444 EXPECT_EQ(0u, events->size()); |
| 1424 EXPECT_EQ(Animation::WaitingForTargetAvailability, | 1445 EXPECT_EQ(Animation::WaitingForTargetAvailability, |
| 1425 controller->GetAnimation(id, Animation::Opacity)->run_state()); | 1446 controller->GetAnimation(Animation::Opacity)->run_state()); |
| 1426 | 1447 |
| 1427 controller->AddValueObserver(&pending_dummy); | 1448 controller->AddValueObserver(&pending_dummy); |
| 1428 | 1449 |
| 1429 // With only a pending observer, the animation should progress to the | 1450 // With only a pending observer, the animation should progress to the |
| 1430 // Starting state and get ticked at its starting point, but should not | 1451 // Starting state and get ticked at its starting point, but should not |
| 1431 // progress to Running. | 1452 // progress to Running. |
| 1432 controller->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1000)); | 1453 controller->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1000)); |
| 1433 controller->UpdateState(true, events.get()); | 1454 controller->UpdateState(true, events.get()); |
| 1434 EXPECT_EQ(0u, events->size()); | 1455 EXPECT_EQ(0u, events->size()); |
| 1435 EXPECT_EQ(Animation::Starting, | 1456 EXPECT_EQ(Animation::Starting, |
| 1436 controller->GetAnimation(id, Animation::Opacity)->run_state()); | 1457 controller->GetAnimation(Animation::Opacity)->run_state()); |
| 1437 EXPECT_EQ(0.5f, pending_dummy.opacity()); | 1458 EXPECT_EQ(0.5f, pending_dummy.opacity()); |
| 1438 | 1459 |
| 1439 // Even when already in the Starting state, the animation should stay | 1460 // Even when already in the Starting state, the animation should stay |
| 1440 // there, and shouldn't be ticked past its starting point. | 1461 // there, and shouldn't be ticked past its starting point. |
| 1441 controller->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(2000)); | 1462 controller->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(2000)); |
| 1442 controller->UpdateState(true, events.get()); | 1463 controller->UpdateState(true, events.get()); |
| 1443 EXPECT_EQ(0u, events->size()); | 1464 EXPECT_EQ(0u, events->size()); |
| 1444 EXPECT_EQ(Animation::Starting, | 1465 EXPECT_EQ(Animation::Starting, |
| 1445 controller->GetAnimation(id, Animation::Opacity)->run_state()); | 1466 controller->GetAnimation(Animation::Opacity)->run_state()); |
| 1446 EXPECT_EQ(0.5f, pending_dummy.opacity()); | 1467 EXPECT_EQ(0.5f, pending_dummy.opacity()); |
| 1447 | 1468 |
| 1448 controller->AddValueObserver(&dummy); | 1469 controller->AddValueObserver(&dummy); |
| 1449 | 1470 |
| 1450 // Now that an active observer has been added, the animation should still | 1471 // Now that an active observer has been added, the animation should still |
| 1451 // initially tick at its starting point, but should now progress to Running. | 1472 // initially tick at its starting point, but should now progress to Running. |
| 1452 controller->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(3000)); | 1473 controller->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(3000)); |
| 1453 controller->UpdateState(true, events.get()); | 1474 controller->UpdateState(true, events.get()); |
| 1454 EXPECT_EQ(1u, events->size()); | 1475 EXPECT_EQ(1u, events->size()); |
| 1455 EXPECT_EQ(Animation::Running, | 1476 EXPECT_EQ(Animation::Running, |
| 1456 controller->GetAnimation(id, Animation::Opacity)->run_state()); | 1477 controller->GetAnimation(Animation::Opacity)->run_state()); |
| 1457 EXPECT_EQ(0.5f, pending_dummy.opacity()); | 1478 EXPECT_EQ(0.5f, pending_dummy.opacity()); |
| 1458 EXPECT_EQ(0.5f, dummy.opacity()); | 1479 EXPECT_EQ(0.5f, dummy.opacity()); |
| 1459 | 1480 |
| 1460 // The animation should now tick past its starting point. | 1481 // The animation should now tick past its starting point. |
| 1461 controller->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(3500)); | 1482 controller->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(3500)); |
| 1462 EXPECT_NE(0.5f, pending_dummy.opacity()); | 1483 EXPECT_NE(0.5f, pending_dummy.opacity()); |
| 1463 EXPECT_NE(0.5f, dummy.opacity()); | 1484 EXPECT_NE(0.5f, dummy.opacity()); |
| 1464 } | 1485 } |
| 1465 | 1486 |
| 1466 TEST(LayerAnimationControllerTest, TransformAnimationBounds) { | 1487 TEST(LayerAnimationControllerTest, TransformAnimationBounds) { |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1494 animation = Animation::Create(curve2.Pass(), 2, 2, Animation::Transform); | 1515 animation = Animation::Create(curve2.Pass(), 2, 2, Animation::Transform); |
| 1495 controller_impl->AddAnimation(animation.Pass()); | 1516 controller_impl->AddAnimation(animation.Pass()); |
| 1496 | 1517 |
| 1497 gfx::BoxF box(1.f, 2.f, -1.f, 3.f, 4.f, 5.f); | 1518 gfx::BoxF box(1.f, 2.f, -1.f, 3.f, 4.f, 5.f); |
| 1498 gfx::BoxF bounds; | 1519 gfx::BoxF bounds; |
| 1499 | 1520 |
| 1500 EXPECT_TRUE(controller_impl->TransformAnimationBoundsForBox(box, &bounds)); | 1521 EXPECT_TRUE(controller_impl->TransformAnimationBoundsForBox(box, &bounds)); |
| 1501 EXPECT_EQ(gfx::BoxF(1.f, 2.f, -4.f, 13.f, 19.f, 20.f).ToString(), | 1522 EXPECT_EQ(gfx::BoxF(1.f, 2.f, -4.f, 13.f, 19.f, 20.f).ToString(), |
| 1502 bounds.ToString()); | 1523 bounds.ToString()); |
| 1503 | 1524 |
| 1504 controller_impl->GetAnimation(1, Animation::Transform) | 1525 controller_impl->GetAnimationById(1) |
| 1505 ->SetRunState(Animation::Finished, TicksFromSecondsF(0.0)); | 1526 ->SetRunState(Animation::Finished, TicksFromSecondsF(0.0)); |
| 1506 | 1527 |
| 1507 // Only the unfinished animation should affect the animated bounds. | 1528 // Only the unfinished animation should affect the animated bounds. |
| 1508 EXPECT_TRUE(controller_impl->TransformAnimationBoundsForBox(box, &bounds)); | 1529 EXPECT_TRUE(controller_impl->TransformAnimationBoundsForBox(box, &bounds)); |
| 1509 EXPECT_EQ(gfx::BoxF(1.f, 2.f, -4.f, 7.f, 16.f, 20.f).ToString(), | 1530 EXPECT_EQ(gfx::BoxF(1.f, 2.f, -4.f, 7.f, 16.f, 20.f).ToString(), |
| 1510 bounds.ToString()); | 1531 bounds.ToString()); |
| 1511 | 1532 |
| 1512 controller_impl->GetAnimation(2, Animation::Transform) | 1533 controller_impl->GetAnimationById(2) |
| 1513 ->SetRunState(Animation::Finished, TicksFromSecondsF(0.0)); | 1534 ->SetRunState(Animation::Finished, TicksFromSecondsF(0.0)); |
| 1514 | 1535 |
| 1515 // There are no longer any running animations. | 1536 // There are no longer any running animations. |
| 1516 EXPECT_FALSE(controller_impl->HasTransformAnimationThatInflatesBounds()); | 1537 EXPECT_FALSE(controller_impl->HasTransformAnimationThatInflatesBounds()); |
| 1517 | 1538 |
| 1518 // Add an animation whose bounds we don't yet support computing. | 1539 // Add an animation whose bounds we don't yet support computing. |
| 1519 scoped_ptr<KeyframedTransformAnimationCurve> curve3( | 1540 scoped_ptr<KeyframedTransformAnimationCurve> curve3( |
| 1520 KeyframedTransformAnimationCurve::Create()); | 1541 KeyframedTransformAnimationCurve::Create()); |
| 1521 TransformOperations operations3; | 1542 TransformOperations operations3; |
| 1522 gfx::Transform transform3; | 1543 gfx::Transform transform3; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1534 // Tests that AbortAnimations aborts all animations targeting the specified | 1555 // Tests that AbortAnimations aborts all animations targeting the specified |
| 1535 // property. | 1556 // property. |
| 1536 TEST(LayerAnimationControllerTest, AbortAnimations) { | 1557 TEST(LayerAnimationControllerTest, AbortAnimations) { |
| 1537 FakeLayerAnimationValueObserver dummy; | 1558 FakeLayerAnimationValueObserver dummy; |
| 1538 scoped_refptr<LayerAnimationController> controller( | 1559 scoped_refptr<LayerAnimationController> controller( |
| 1539 LayerAnimationController::Create(0)); | 1560 LayerAnimationController::Create(0)); |
| 1540 controller->AddValueObserver(&dummy); | 1561 controller->AddValueObserver(&dummy); |
| 1541 | 1562 |
| 1542 // Start with several animations, and allow some of them to reach the finished | 1563 // Start with several animations, and allow some of them to reach the finished |
| 1543 // state. | 1564 // state. |
| 1544 controller->AddAnimation(CreateAnimation( | 1565 controller->AddAnimation(Animation::Create( |
| 1545 scoped_ptr<AnimationCurve>(new FakeTransformTransition(1.0)).Pass(), | 1566 scoped_ptr<AnimationCurve>(new FakeTransformTransition(1.0)).Pass(), 1, 1, |
| 1546 1, | |
| 1547 Animation::Transform)); | 1567 Animation::Transform)); |
| 1548 controller->AddAnimation(CreateAnimation( | 1568 controller->AddAnimation(Animation::Create( |
| 1549 scoped_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)).Pass(), | 1569 scoped_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)).Pass(), |
| 1550 2, | 1570 2, 2, Animation::Opacity)); |
| 1551 Animation::Opacity)); | 1571 controller->AddAnimation(Animation::Create( |
| 1552 controller->AddAnimation(CreateAnimation( | 1572 scoped_ptr<AnimationCurve>(new FakeTransformTransition(1.0)).Pass(), 3, 3, |
| 1553 scoped_ptr<AnimationCurve>(new FakeTransformTransition(1.0)).Pass(), | |
| 1554 3, | |
| 1555 Animation::Transform)); | 1573 Animation::Transform)); |
| 1556 controller->AddAnimation(CreateAnimation( | 1574 controller->AddAnimation(Animation::Create( |
| 1557 scoped_ptr<AnimationCurve>(new FakeTransformTransition(2.0)).Pass(), | 1575 scoped_ptr<AnimationCurve>(new FakeTransformTransition(2.0)).Pass(), 4, 4, |
| 1558 4, | |
| 1559 Animation::Transform)); | 1576 Animation::Transform)); |
| 1560 controller->AddAnimation(CreateAnimation( | 1577 controller->AddAnimation(Animation::Create( |
| 1561 scoped_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)).Pass(), | 1578 scoped_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)).Pass(), |
| 1562 5, | 1579 5, 5, Animation::Opacity)); |
| 1563 Animation::Opacity)); | |
| 1564 | 1580 |
| 1565 controller->Animate(kInitialTickTime); | 1581 controller->Animate(kInitialTickTime); |
| 1566 controller->UpdateState(true, nullptr); | 1582 controller->UpdateState(true, nullptr); |
| 1567 controller->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1000)); | 1583 controller->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1000)); |
| 1568 controller->UpdateState(true, nullptr); | 1584 controller->UpdateState(true, nullptr); |
| 1569 | 1585 |
| 1570 EXPECT_EQ(Animation::Finished, | 1586 EXPECT_EQ(Animation::Finished, controller->GetAnimationById(1)->run_state()); |
| 1571 controller->GetAnimation(1, Animation::Transform)->run_state()); | 1587 EXPECT_EQ(Animation::Finished, controller->GetAnimationById(2)->run_state()); |
| 1572 EXPECT_EQ(Animation::Finished, | 1588 EXPECT_EQ(Animation::Running, controller->GetAnimationById(3)->run_state()); |
| 1573 controller->GetAnimation(2, Animation::Opacity)->run_state()); | |
| 1574 EXPECT_EQ(Animation::Running, | |
| 1575 controller->GetAnimation(3, Animation::Transform)->run_state()); | |
| 1576 EXPECT_EQ(Animation::WaitingForTargetAvailability, | 1589 EXPECT_EQ(Animation::WaitingForTargetAvailability, |
| 1577 controller->GetAnimation(4, Animation::Transform)->run_state()); | 1590 controller->GetAnimationById(4)->run_state()); |
| 1578 EXPECT_EQ(Animation::Running, | 1591 EXPECT_EQ(Animation::Running, controller->GetAnimationById(5)->run_state()); |
| 1579 controller->GetAnimation(5, Animation::Opacity)->run_state()); | |
| 1580 | 1592 |
| 1581 controller->AbortAnimations(Animation::Transform); | 1593 controller->AbortAnimations(Animation::Transform); |
| 1582 | 1594 |
| 1583 // Only un-finished Transform animations should have been aborted. | 1595 // Only un-finished Transform animations should have been aborted. |
| 1584 EXPECT_EQ(Animation::Finished, | 1596 EXPECT_EQ(Animation::Finished, controller->GetAnimationById(1)->run_state()); |
| 1585 controller->GetAnimation(1, Animation::Transform)->run_state()); | 1597 EXPECT_EQ(Animation::Finished, controller->GetAnimationById(2)->run_state()); |
| 1586 EXPECT_EQ(Animation::Finished, | 1598 EXPECT_EQ(Animation::Aborted, controller->GetAnimationById(3)->run_state()); |
| 1587 controller->GetAnimation(2, Animation::Opacity)->run_state()); | 1599 EXPECT_EQ(Animation::Aborted, controller->GetAnimationById(4)->run_state()); |
| 1588 EXPECT_EQ(Animation::Aborted, | 1600 EXPECT_EQ(Animation::Running, controller->GetAnimationById(5)->run_state()); |
| 1589 controller->GetAnimation(3, Animation::Transform)->run_state()); | |
| 1590 EXPECT_EQ(Animation::Aborted, | |
| 1591 controller->GetAnimation(4, Animation::Transform)->run_state()); | |
| 1592 EXPECT_EQ(Animation::Running, | |
| 1593 controller->GetAnimation(5, Animation::Opacity)->run_state()); | |
| 1594 } | 1601 } |
| 1595 | 1602 |
| 1596 // An animation aborted on the main thread should get deleted on both threads. | 1603 // An animation aborted on the main thread should get deleted on both threads. |
| 1597 TEST(LayerAnimationControllerTest, MainThreadAbortedAnimationGetsDeleted) { | 1604 TEST(LayerAnimationControllerTest, MainThreadAbortedAnimationGetsDeleted) { |
| 1598 FakeLayerAnimationValueObserver dummy_impl; | 1605 FakeLayerAnimationValueObserver dummy_impl; |
| 1599 scoped_refptr<LayerAnimationController> controller_impl( | 1606 scoped_refptr<LayerAnimationController> controller_impl( |
| 1600 LayerAnimationController::Create(0)); | 1607 LayerAnimationController::Create(0)); |
| 1601 controller_impl->AddValueObserver(&dummy_impl); | 1608 controller_impl->AddValueObserver(&dummy_impl); |
| 1602 FakeLayerAnimationValueObserver dummy; | 1609 FakeLayerAnimationValueObserver dummy; |
| 1603 scoped_refptr<LayerAnimationController> controller( | 1610 scoped_refptr<LayerAnimationController> controller( |
| 1604 LayerAnimationController::Create(0)); | 1611 LayerAnimationController::Create(0)); |
| 1605 controller->AddValueObserver(&dummy); | 1612 controller->AddValueObserver(&dummy); |
| 1606 | 1613 |
| 1607 AddOpacityTransitionToController(controller.get(), 1.0, 0.f, 1.f, false); | 1614 int animation_id = |
| 1608 int group_id = controller->GetAnimation(Animation::Opacity)->group(); | 1615 AddOpacityTransitionToController(controller.get(), 1.0, 0.f, 1.f, false); |
| 1609 | 1616 |
| 1610 controller->PushAnimationUpdatesTo(controller_impl.get()); | 1617 controller->PushAnimationUpdatesTo(controller_impl.get()); |
| 1611 controller_impl->ActivateAnimations(); | 1618 controller_impl->ActivateAnimations(); |
| 1612 EXPECT_TRUE(controller_impl->GetAnimation(group_id, Animation::Opacity)); | 1619 EXPECT_TRUE(controller_impl->GetAnimationById(animation_id)); |
| 1613 | 1620 |
| 1614 controller->AbortAnimations(Animation::Opacity); | 1621 controller->AbortAnimations(Animation::Opacity); |
| 1615 EXPECT_EQ(Animation::Aborted, | 1622 EXPECT_EQ(Animation::Aborted, |
| 1616 controller->GetAnimation(Animation::Opacity)->run_state()); | 1623 controller->GetAnimation(Animation::Opacity)->run_state()); |
| 1617 EXPECT_FALSE(dummy.animation_waiting_for_deletion()); | 1624 EXPECT_FALSE(dummy.animation_waiting_for_deletion()); |
| 1618 EXPECT_FALSE(dummy_impl.animation_waiting_for_deletion()); | 1625 EXPECT_FALSE(dummy_impl.animation_waiting_for_deletion()); |
| 1619 | 1626 |
| 1620 controller->Animate(kInitialTickTime); | 1627 controller->Animate(kInitialTickTime); |
| 1621 controller->UpdateState(true, nullptr); | 1628 controller->UpdateState(true, nullptr); |
| 1622 EXPECT_TRUE(dummy.animation_waiting_for_deletion()); | 1629 EXPECT_TRUE(dummy.animation_waiting_for_deletion()); |
| 1623 EXPECT_EQ(Animation::WaitingForDeletion, | 1630 EXPECT_EQ(Animation::WaitingForDeletion, |
| 1624 controller->GetAnimation(Animation::Opacity)->run_state()); | 1631 controller->GetAnimation(Animation::Opacity)->run_state()); |
| 1625 | 1632 |
| 1626 controller->PushAnimationUpdatesTo(controller_impl.get()); | 1633 controller->PushAnimationUpdatesTo(controller_impl.get()); |
| 1627 controller_impl->ActivateAnimations(); | 1634 controller_impl->ActivateAnimations(); |
| 1628 EXPECT_FALSE(controller->GetAnimation(group_id, Animation::Opacity)); | 1635 EXPECT_FALSE(controller->GetAnimationById(animation_id)); |
| 1629 EXPECT_FALSE(controller_impl->GetAnimation(group_id, Animation::Opacity)); | 1636 EXPECT_FALSE(controller_impl->GetAnimationById(animation_id)); |
| 1630 } | 1637 } |
| 1631 | 1638 |
| 1632 // An animation aborted on the impl thread should get deleted on both threads. | 1639 // An animation aborted on the impl thread should get deleted on both threads. |
| 1633 TEST(LayerAnimationControllerTest, ImplThreadAbortedAnimationGetsDeleted) { | 1640 TEST(LayerAnimationControllerTest, ImplThreadAbortedAnimationGetsDeleted) { |
| 1634 FakeLayerAnimationValueObserver dummy_impl; | 1641 FakeLayerAnimationValueObserver dummy_impl; |
| 1635 scoped_refptr<LayerAnimationController> controller_impl( | 1642 scoped_refptr<LayerAnimationController> controller_impl( |
| 1636 LayerAnimationController::Create(0)); | 1643 LayerAnimationController::Create(0)); |
| 1637 controller_impl->AddValueObserver(&dummy_impl); | 1644 controller_impl->AddValueObserver(&dummy_impl); |
| 1638 FakeLayerAnimationValueObserver dummy; | 1645 FakeLayerAnimationValueObserver dummy; |
| 1639 scoped_refptr<LayerAnimationController> controller( | 1646 scoped_refptr<LayerAnimationController> controller( |
| 1640 LayerAnimationController::Create(0)); | 1647 LayerAnimationController::Create(0)); |
| 1641 controller->AddValueObserver(&dummy); | 1648 controller->AddValueObserver(&dummy); |
| 1642 | 1649 |
| 1643 AddOpacityTransitionToController(controller.get(), 1.0, 0.f, 1.f, false); | 1650 int animation_id = |
| 1644 int group_id = controller->GetAnimation(Animation::Opacity)->group(); | 1651 AddOpacityTransitionToController(controller.get(), 1.0, 0.f, 1.f, false); |
| 1645 | 1652 |
| 1646 controller->PushAnimationUpdatesTo(controller_impl.get()); | 1653 controller->PushAnimationUpdatesTo(controller_impl.get()); |
| 1647 controller_impl->ActivateAnimations(); | 1654 controller_impl->ActivateAnimations(); |
| 1648 EXPECT_TRUE(controller_impl->GetAnimation(group_id, Animation::Opacity)); | 1655 EXPECT_TRUE(controller_impl->GetAnimationById(animation_id)); |
| 1649 | 1656 |
| 1650 controller_impl->AbortAnimations(Animation::Opacity); | 1657 controller_impl->AbortAnimations(Animation::Opacity); |
| 1651 EXPECT_EQ(Animation::Aborted, | 1658 EXPECT_EQ(Animation::Aborted, |
| 1652 controller_impl->GetAnimation(Animation::Opacity)->run_state()); | 1659 controller_impl->GetAnimation(Animation::Opacity)->run_state()); |
| 1653 EXPECT_FALSE(dummy.animation_waiting_for_deletion()); | 1660 EXPECT_FALSE(dummy.animation_waiting_for_deletion()); |
| 1654 EXPECT_FALSE(dummy_impl.animation_waiting_for_deletion()); | 1661 EXPECT_FALSE(dummy_impl.animation_waiting_for_deletion()); |
| 1655 | 1662 |
| 1656 AnimationEventsVector events; | 1663 AnimationEventsVector events; |
| 1657 controller_impl->Animate(kInitialTickTime); | 1664 controller_impl->Animate(kInitialTickTime); |
| 1658 controller_impl->UpdateState(true, &events); | 1665 controller_impl->UpdateState(true, &events); |
| 1659 EXPECT_TRUE(dummy_impl.animation_waiting_for_deletion()); | 1666 EXPECT_TRUE(dummy_impl.animation_waiting_for_deletion()); |
| 1660 EXPECT_EQ(1u, events.size()); | 1667 EXPECT_EQ(1u, events.size()); |
| 1661 EXPECT_EQ(AnimationEvent::Aborted, events[0].type); | 1668 EXPECT_EQ(AnimationEvent::Aborted, events[0].type); |
| 1662 EXPECT_EQ(Animation::WaitingForDeletion, | 1669 EXPECT_EQ(Animation::WaitingForDeletion, |
| 1663 controller_impl->GetAnimation(Animation::Opacity)->run_state()); | 1670 controller_impl->GetAnimation(Animation::Opacity)->run_state()); |
| 1664 | 1671 |
| 1665 controller->NotifyAnimationAborted(events[0]); | 1672 controller->NotifyAnimationAborted(events[0]); |
| 1666 EXPECT_EQ(Animation::Aborted, | 1673 EXPECT_EQ(Animation::Aborted, |
| 1667 controller->GetAnimation(Animation::Opacity)->run_state()); | 1674 controller->GetAnimation(Animation::Opacity)->run_state()); |
| 1668 | 1675 |
| 1669 controller->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(500)); | 1676 controller->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(500)); |
| 1670 controller->UpdateState(true, nullptr); | 1677 controller->UpdateState(true, nullptr); |
| 1671 EXPECT_TRUE(dummy.animation_waiting_for_deletion()); | 1678 EXPECT_TRUE(dummy.animation_waiting_for_deletion()); |
| 1672 EXPECT_EQ(Animation::WaitingForDeletion, | 1679 EXPECT_EQ(Animation::WaitingForDeletion, |
| 1673 controller->GetAnimation(Animation::Opacity)->run_state()); | 1680 controller->GetAnimation(Animation::Opacity)->run_state()); |
| 1674 | 1681 |
| 1675 controller->PushAnimationUpdatesTo(controller_impl.get()); | 1682 controller->PushAnimationUpdatesTo(controller_impl.get()); |
| 1676 controller_impl->ActivateAnimations(); | 1683 controller_impl->ActivateAnimations(); |
| 1677 EXPECT_FALSE(controller->GetAnimation(group_id, Animation::Opacity)); | 1684 EXPECT_FALSE(controller->GetAnimationById(animation_id)); |
| 1678 EXPECT_FALSE(controller_impl->GetAnimation(group_id, Animation::Opacity)); | 1685 EXPECT_FALSE(controller_impl->GetAnimationById(animation_id)); |
| 1679 } | 1686 } |
| 1680 | 1687 |
| 1681 // Ensure that we only generate Finished events for animations in a group | 1688 // Ensure that we only generate Finished events for animations in a group |
| 1682 // once all animations in that group are finished. | 1689 // once all animations in that group are finished. |
| 1683 TEST(LayerAnimationControllerTest, FinishedEventsForGroup) { | 1690 TEST(LayerAnimationControllerTest, FinishedEventsForGroup) { |
| 1684 scoped_ptr<AnimationEventsVector> events( | 1691 scoped_ptr<AnimationEventsVector> events( |
| 1685 make_scoped_ptr(new AnimationEventsVector)); | 1692 make_scoped_ptr(new AnimationEventsVector)); |
| 1686 FakeLayerAnimationValueObserver dummy_impl; | 1693 FakeLayerAnimationValueObserver dummy_impl; |
| 1687 scoped_refptr<LayerAnimationController> controller_impl( | 1694 scoped_refptr<LayerAnimationController> controller_impl( |
| 1688 LayerAnimationController::Create(0)); | 1695 LayerAnimationController::Create(0)); |
| 1689 controller_impl->AddValueObserver(&dummy_impl); | 1696 controller_impl->AddValueObserver(&dummy_impl); |
| 1690 | 1697 |
| 1698 const int group_id = 1; |
| 1699 |
| 1691 // Add two animations with the same group id but different durations. | 1700 // Add two animations with the same group id but different durations. |
| 1692 controller_impl->AddAnimation(CreateAnimation( | 1701 controller_impl->AddAnimation(Animation::Create( |
| 1693 scoped_ptr<AnimationCurve>(new FakeTransformTransition(2.0)).Pass(), | 1702 scoped_ptr<AnimationCurve>(new FakeTransformTransition(2.0)).Pass(), 1, |
| 1694 1, | 1703 group_id, Animation::Transform)); |
| 1695 Animation::Transform)); | 1704 controller_impl->AddAnimation(Animation::Create( |
| 1696 controller_impl->AddAnimation(CreateAnimation( | |
| 1697 scoped_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)).Pass(), | 1705 scoped_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)).Pass(), |
| 1698 1, | 1706 2, group_id, Animation::Opacity)); |
| 1699 Animation::Opacity)); | |
| 1700 | 1707 |
| 1701 controller_impl->Animate(kInitialTickTime); | 1708 controller_impl->Animate(kInitialTickTime); |
| 1702 controller_impl->UpdateState(true, events.get()); | 1709 controller_impl->UpdateState(true, events.get()); |
| 1703 | 1710 |
| 1704 // Both animations should have started. | 1711 // Both animations should have started. |
| 1705 EXPECT_EQ(2u, events->size()); | 1712 EXPECT_EQ(2u, events->size()); |
| 1706 EXPECT_EQ(AnimationEvent::Started, (*events)[0].type); | 1713 EXPECT_EQ(AnimationEvent::Started, (*events)[0].type); |
| 1707 EXPECT_EQ(AnimationEvent::Started, (*events)[1].type); | 1714 EXPECT_EQ(AnimationEvent::Started, (*events)[1].type); |
| 1708 | 1715 |
| 1709 events.reset(new AnimationEventsVector); | 1716 events.reset(new AnimationEventsVector); |
| 1710 controller_impl->Animate(kInitialTickTime + | 1717 controller_impl->Animate(kInitialTickTime + |
| 1711 TimeDelta::FromMilliseconds(1000)); | 1718 TimeDelta::FromMilliseconds(1000)); |
| 1712 controller_impl->UpdateState(true, events.get()); | 1719 controller_impl->UpdateState(true, events.get()); |
| 1713 | 1720 |
| 1714 // The opacity animation should be finished, but should not have generated | 1721 // The opacity animation should be finished, but should not have generated |
| 1715 // a Finished event yet. | 1722 // a Finished event yet. |
| 1716 EXPECT_EQ(0u, events->size()); | 1723 EXPECT_EQ(0u, events->size()); |
| 1717 EXPECT_EQ(Animation::Finished, | 1724 EXPECT_EQ(Animation::Finished, |
| 1718 controller_impl->GetAnimation(1, Animation::Opacity)->run_state()); | 1725 controller_impl->GetAnimationById(2)->run_state()); |
| 1719 EXPECT_EQ(Animation::Running, | 1726 EXPECT_EQ(Animation::Running, |
| 1720 controller_impl->GetAnimation(1, | 1727 controller_impl->GetAnimationById(1)->run_state()); |
| 1721 Animation::Transform)->run_state()); | |
| 1722 | 1728 |
| 1723 controller_impl->Animate(kInitialTickTime + | 1729 controller_impl->Animate(kInitialTickTime + |
| 1724 TimeDelta::FromMilliseconds(2000)); | 1730 TimeDelta::FromMilliseconds(2000)); |
| 1725 controller_impl->UpdateState(true, events.get()); | 1731 controller_impl->UpdateState(true, events.get()); |
| 1726 | 1732 |
| 1727 // Both animations should have generated Finished events. | 1733 // Both animations should have generated Finished events. |
| 1728 EXPECT_EQ(2u, events->size()); | 1734 EXPECT_EQ(2u, events->size()); |
| 1729 EXPECT_EQ(AnimationEvent::Finished, (*events)[0].type); | 1735 EXPECT_EQ(AnimationEvent::Finished, (*events)[0].type); |
| 1730 EXPECT_EQ(AnimationEvent::Finished, (*events)[1].type); | 1736 EXPECT_EQ(AnimationEvent::Finished, (*events)[1].type); |
| 1731 } | 1737 } |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1814 TransformKeyframe::Create(base::TimeDelta(), operations2, nullptr)); | 1820 TransformKeyframe::Create(base::TimeDelta(), operations2, nullptr)); |
| 1815 operations2.AppendScale(2.0, 3.0, 4.0); | 1821 operations2.AppendScale(2.0, 3.0, 4.0); |
| 1816 curve2->AddKeyframe(TransformKeyframe::Create( | 1822 curve2->AddKeyframe(TransformKeyframe::Create( |
| 1817 base::TimeDelta::FromSecondsD(1.0), operations2, nullptr)); | 1823 base::TimeDelta::FromSecondsD(1.0), operations2, nullptr)); |
| 1818 | 1824 |
| 1819 animation = Animation::Create(curve2.Pass(), 3, 3, Animation::Transform); | 1825 animation = Animation::Create(curve2.Pass(), 3, 3, Animation::Transform); |
| 1820 controller_impl->AddAnimation(animation.Pass()); | 1826 controller_impl->AddAnimation(animation.Pass()); |
| 1821 | 1827 |
| 1822 EXPECT_TRUE(controller_impl->HasAnimationThatAffectsScale()); | 1828 EXPECT_TRUE(controller_impl->HasAnimationThatAffectsScale()); |
| 1823 | 1829 |
| 1824 controller_impl->GetAnimation(3, Animation::Transform) | 1830 controller_impl->GetAnimationById(3) |
| 1825 ->SetRunState(Animation::Finished, TicksFromSecondsF(0.0)); | 1831 ->SetRunState(Animation::Finished, TicksFromSecondsF(0.0)); |
| 1826 | 1832 |
| 1827 // Only unfinished animations should be considered by | 1833 // Only unfinished animations should be considered by |
| 1828 // HasAnimationThatAffectsScale. | 1834 // HasAnimationThatAffectsScale. |
| 1829 EXPECT_FALSE(controller_impl->HasAnimationThatAffectsScale()); | 1835 EXPECT_FALSE(controller_impl->HasAnimationThatAffectsScale()); |
| 1830 } | 1836 } |
| 1831 | 1837 |
| 1832 TEST(LayerAnimationControllerTest, HasOnlyTranslationTransforms) { | 1838 TEST(LayerAnimationControllerTest, HasOnlyTranslationTransforms) { |
| 1833 scoped_refptr<LayerAnimationController> controller_impl( | 1839 scoped_refptr<LayerAnimationController> controller_impl( |
| 1834 LayerAnimationController::Create(0)); | 1840 LayerAnimationController::Create(0)); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1869 operations2.AppendScale(2.0, 3.0, 4.0); | 1875 operations2.AppendScale(2.0, 3.0, 4.0); |
| 1870 curve2->AddKeyframe(TransformKeyframe::Create( | 1876 curve2->AddKeyframe(TransformKeyframe::Create( |
| 1871 base::TimeDelta::FromSecondsD(1.0), operations2, nullptr)); | 1877 base::TimeDelta::FromSecondsD(1.0), operations2, nullptr)); |
| 1872 | 1878 |
| 1873 animation = Animation::Create(curve2.Pass(), 3, 3, Animation::Transform); | 1879 animation = Animation::Create(curve2.Pass(), 3, 3, Animation::Transform); |
| 1874 controller_impl->AddAnimation(animation.Pass()); | 1880 controller_impl->AddAnimation(animation.Pass()); |
| 1875 | 1881 |
| 1876 // A scale animation is not a translation. | 1882 // A scale animation is not a translation. |
| 1877 EXPECT_FALSE(controller_impl->HasOnlyTranslationTransforms()); | 1883 EXPECT_FALSE(controller_impl->HasOnlyTranslationTransforms()); |
| 1878 | 1884 |
| 1879 controller_impl->GetAnimation(3, Animation::Transform) | 1885 controller_impl->GetAnimationById(3) |
| 1880 ->SetRunState(Animation::Finished, TicksFromSecondsF(0.0)); | 1886 ->SetRunState(Animation::Finished, TicksFromSecondsF(0.0)); |
| 1881 | 1887 |
| 1882 // Only unfinished animations should be considered by | 1888 // Only unfinished animations should be considered by |
| 1883 // HasOnlyTranslationTransforms. | 1889 // HasOnlyTranslationTransforms. |
| 1884 EXPECT_TRUE(controller_impl->HasOnlyTranslationTransforms()); | 1890 EXPECT_TRUE(controller_impl->HasOnlyTranslationTransforms()); |
| 1885 } | 1891 } |
| 1886 | 1892 |
| 1887 TEST(LayerAnimationControllerTest, MaximumTargetScale) { | 1893 TEST(LayerAnimationControllerTest, MaximumTargetScale) { |
| 1888 scoped_refptr<LayerAnimationController> controller_impl( | 1894 scoped_refptr<LayerAnimationController> controller_impl( |
| 1889 LayerAnimationController::Create(0)); | 1895 LayerAnimationController::Create(0)); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1933 TransformKeyframe::Create(base::TimeDelta(), operations3, nullptr)); | 1939 TransformKeyframe::Create(base::TimeDelta(), operations3, nullptr)); |
| 1934 operations3.AppendPerspective(6.0); | 1940 operations3.AppendPerspective(6.0); |
| 1935 curve3->AddKeyframe(TransformKeyframe::Create( | 1941 curve3->AddKeyframe(TransformKeyframe::Create( |
| 1936 base::TimeDelta::FromSecondsD(1.0), operations3, nullptr)); | 1942 base::TimeDelta::FromSecondsD(1.0), operations3, nullptr)); |
| 1937 | 1943 |
| 1938 animation = Animation::Create(curve3.Pass(), 3, 3, Animation::Transform); | 1944 animation = Animation::Create(curve3.Pass(), 3, 3, Animation::Transform); |
| 1939 controller_impl->AddAnimation(animation.Pass()); | 1945 controller_impl->AddAnimation(animation.Pass()); |
| 1940 | 1946 |
| 1941 EXPECT_FALSE(controller_impl->MaximumTargetScale(&max_scale)); | 1947 EXPECT_FALSE(controller_impl->MaximumTargetScale(&max_scale)); |
| 1942 | 1948 |
| 1943 controller_impl->GetAnimation(3, Animation::Transform) | 1949 controller_impl->GetAnimationById(3) |
| 1944 ->SetRunState(Animation::Finished, TicksFromSecondsF(0.0)); | 1950 ->SetRunState(Animation::Finished, TicksFromSecondsF(0.0)); |
| 1945 controller_impl->GetAnimation(2, Animation::Transform) | 1951 controller_impl->GetAnimationById(2) |
| 1946 ->SetRunState(Animation::Finished, TicksFromSecondsF(0.0)); | 1952 ->SetRunState(Animation::Finished, TicksFromSecondsF(0.0)); |
| 1947 | 1953 |
| 1948 // Only unfinished animations should be considered by | 1954 // Only unfinished animations should be considered by |
| 1949 // MaximumTargetScale. | 1955 // MaximumTargetScale. |
| 1950 EXPECT_TRUE(controller_impl->MaximumTargetScale(&max_scale)); | 1956 EXPECT_TRUE(controller_impl->MaximumTargetScale(&max_scale)); |
| 1951 EXPECT_EQ(4.f, max_scale); | 1957 EXPECT_EQ(4.f, max_scale); |
| 1952 } | 1958 } |
| 1953 | 1959 |
| 1954 TEST(LayerAnimationControllerTest, MaximumTargetScaleWithDirection) { | 1960 TEST(LayerAnimationControllerTest, MaximumTargetScaleWithDirection) { |
| 1955 scoped_refptr<LayerAnimationController> controller_impl( | 1961 scoped_refptr<LayerAnimationController> controller_impl( |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2026 scoped_refptr<LayerAnimationController> controller_impl( | 2032 scoped_refptr<LayerAnimationController> controller_impl( |
| 2027 LayerAnimationController::Create(0)); | 2033 LayerAnimationController::Create(0)); |
| 2028 controller_impl->AddValueObserver(&dummy_impl); | 2034 controller_impl->AddValueObserver(&dummy_impl); |
| 2029 controller_impl->AddValueObserver(&pending_dummy_impl); | 2035 controller_impl->AddValueObserver(&pending_dummy_impl); |
| 2030 FakeLayerAnimationValueObserver dummy; | 2036 FakeLayerAnimationValueObserver dummy; |
| 2031 scoped_refptr<LayerAnimationController> controller( | 2037 scoped_refptr<LayerAnimationController> controller( |
| 2032 LayerAnimationController::Create(0)); | 2038 LayerAnimationController::Create(0)); |
| 2033 controller->AddValueObserver(&dummy); | 2039 controller->AddValueObserver(&dummy); |
| 2034 | 2040 |
| 2035 EXPECT_FALSE(controller->needs_to_start_animations_for_testing()); | 2041 EXPECT_FALSE(controller->needs_to_start_animations_for_testing()); |
| 2036 AddOpacityTransitionToController(controller.get(), 1, 0.5f, 1.f, false); | 2042 int animation_id = |
| 2037 int group_id = controller->GetAnimation(Animation::Opacity)->group(); | 2043 AddOpacityTransitionToController(controller.get(), 1, 0.5f, 1.f, false); |
| 2038 EXPECT_TRUE(controller->needs_to_start_animations_for_testing()); | 2044 EXPECT_TRUE(controller->needs_to_start_animations_for_testing()); |
| 2039 | 2045 |
| 2040 EXPECT_FALSE(controller_impl->needs_to_start_animations_for_testing()); | 2046 EXPECT_FALSE(controller_impl->needs_to_start_animations_for_testing()); |
| 2041 controller->PushAnimationUpdatesTo(controller_impl.get()); | 2047 controller->PushAnimationUpdatesTo(controller_impl.get()); |
| 2042 EXPECT_TRUE(controller_impl->needs_to_start_animations_for_testing()); | 2048 EXPECT_TRUE(controller_impl->needs_to_start_animations_for_testing()); |
| 2043 | 2049 |
| 2044 EXPECT_TRUE(controller_impl->GetAnimation(group_id, Animation::Opacity)); | 2050 EXPECT_TRUE(controller_impl->GetAnimationById(animation_id)); |
| 2045 EXPECT_EQ( | 2051 EXPECT_EQ(Animation::WaitingForTargetAvailability, |
| 2046 Animation::WaitingForTargetAvailability, | 2052 controller_impl->GetAnimationById(animation_id)->run_state()); |
| 2047 controller_impl->GetAnimation(group_id, Animation::Opacity)->run_state()); | 2053 EXPECT_TRUE(controller_impl->GetAnimationById(animation_id) |
| 2048 EXPECT_TRUE(controller_impl->GetAnimation(group_id, Animation::Opacity) | |
| 2049 ->affects_pending_observers()); | 2054 ->affects_pending_observers()); |
| 2050 EXPECT_FALSE(controller_impl->GetAnimation(group_id, Animation::Opacity) | 2055 EXPECT_FALSE(controller_impl->GetAnimationById(animation_id) |
| 2051 ->affects_active_observers()); | 2056 ->affects_active_observers()); |
| 2052 | 2057 |
| 2053 controller_impl->Animate(kInitialTickTime); | 2058 controller_impl->Animate(kInitialTickTime); |
| 2054 EXPECT_FALSE(controller_impl->needs_to_start_animations_for_testing()); | 2059 EXPECT_FALSE(controller_impl->needs_to_start_animations_for_testing()); |
| 2055 controller_impl->UpdateState(true, events.get()); | 2060 controller_impl->UpdateState(true, events.get()); |
| 2056 | 2061 |
| 2057 // Since the animation hasn't been activated, it should still be Starting | 2062 // Since the animation hasn't been activated, it should still be Starting |
| 2058 // rather than Running. | 2063 // rather than Running. |
| 2059 EXPECT_EQ( | 2064 EXPECT_EQ(Animation::Starting, |
| 2060 Animation::Starting, | 2065 controller_impl->GetAnimationById(animation_id)->run_state()); |
| 2061 controller_impl->GetAnimation(group_id, Animation::Opacity)->run_state()); | |
| 2062 | 2066 |
| 2063 // Since the animation hasn't been activated, only the pending observer | 2067 // Since the animation hasn't been activated, only the pending observer |
| 2064 // should have been ticked. | 2068 // should have been ticked. |
| 2065 EXPECT_EQ(0.5f, pending_dummy_impl.opacity()); | 2069 EXPECT_EQ(0.5f, pending_dummy_impl.opacity()); |
| 2066 EXPECT_EQ(0.f, dummy_impl.opacity()); | 2070 EXPECT_EQ(0.f, dummy_impl.opacity()); |
| 2067 | 2071 |
| 2068 controller_impl->ActivateAnimations(); | 2072 controller_impl->ActivateAnimations(); |
| 2069 EXPECT_TRUE(controller_impl->GetAnimation(group_id, Animation::Opacity) | 2073 EXPECT_TRUE(controller_impl->GetAnimationById(animation_id) |
| 2070 ->affects_pending_observers()); | 2074 ->affects_pending_observers()); |
| 2071 EXPECT_TRUE(controller_impl->GetAnimation(group_id, Animation::Opacity) | 2075 EXPECT_TRUE(controller_impl->GetAnimationById(animation_id) |
| 2072 ->affects_active_observers()); | 2076 ->affects_active_observers()); |
| 2073 | 2077 |
| 2074 controller_impl->Animate(kInitialTickTime + | 2078 controller_impl->Animate(kInitialTickTime + |
| 2075 TimeDelta::FromMilliseconds(1000)); | 2079 TimeDelta::FromMilliseconds(1000)); |
| 2076 controller_impl->UpdateState(true, events.get()); | 2080 controller_impl->UpdateState(true, events.get()); |
| 2077 | 2081 |
| 2078 // Since the animation has been activated, it should have reached the | 2082 // Since the animation has been activated, it should have reached the |
| 2079 // Running state and the active observer should start to get ticked. | 2083 // Running state and the active observer should start to get ticked. |
| 2080 EXPECT_EQ( | 2084 EXPECT_EQ(Animation::Running, |
| 2081 Animation::Running, | 2085 controller_impl->GetAnimationById(animation_id)->run_state()); |
| 2082 controller_impl->GetAnimation(group_id, Animation::Opacity)->run_state()); | |
| 2083 EXPECT_EQ(0.5f, pending_dummy_impl.opacity()); | 2086 EXPECT_EQ(0.5f, pending_dummy_impl.opacity()); |
| 2084 EXPECT_EQ(0.5f, dummy_impl.opacity()); | 2087 EXPECT_EQ(0.5f, dummy_impl.opacity()); |
| 2085 } | 2088 } |
| 2086 | 2089 |
| 2087 TEST(LayerAnimationControllerTest, ActivationBetweenAnimateAndUpdateState) { | 2090 TEST(LayerAnimationControllerTest, ActivationBetweenAnimateAndUpdateState) { |
| 2088 scoped_ptr<AnimationEventsVector> events( | 2091 scoped_ptr<AnimationEventsVector> events( |
| 2089 make_scoped_ptr(new AnimationEventsVector)); | 2092 make_scoped_ptr(new AnimationEventsVector)); |
| 2090 FakeLayerAnimationValueObserver dummy_impl; | 2093 FakeLayerAnimationValueObserver dummy_impl; |
| 2091 FakeInactiveLayerAnimationValueObserver pending_dummy_impl; | 2094 FakeInactiveLayerAnimationValueObserver pending_dummy_impl; |
| 2092 scoped_refptr<LayerAnimationController> controller_impl( | 2095 scoped_refptr<LayerAnimationController> controller_impl( |
| 2093 LayerAnimationController::Create(0)); | 2096 LayerAnimationController::Create(0)); |
| 2094 controller_impl->AddValueObserver(&dummy_impl); | 2097 controller_impl->AddValueObserver(&dummy_impl); |
| 2095 controller_impl->AddValueObserver(&pending_dummy_impl); | 2098 controller_impl->AddValueObserver(&pending_dummy_impl); |
| 2096 FakeLayerAnimationValueObserver dummy; | 2099 FakeLayerAnimationValueObserver dummy; |
| 2097 scoped_refptr<LayerAnimationController> controller( | 2100 scoped_refptr<LayerAnimationController> controller( |
| 2098 LayerAnimationController::Create(0)); | 2101 LayerAnimationController::Create(0)); |
| 2099 controller->AddValueObserver(&dummy); | 2102 controller->AddValueObserver(&dummy); |
| 2100 | 2103 |
| 2101 AddOpacityTransitionToController(controller.get(), 1, 0.5f, 1.f, true); | 2104 int animation_id = |
| 2102 int group_id = controller->GetAnimation(Animation::Opacity)->group(); | 2105 AddOpacityTransitionToController(controller.get(), 1, 0.5f, 1.f, true); |
| 2103 | 2106 |
| 2104 controller->PushAnimationUpdatesTo(controller_impl.get()); | 2107 controller->PushAnimationUpdatesTo(controller_impl.get()); |
| 2105 | 2108 |
| 2106 EXPECT_TRUE(controller_impl->GetAnimation(group_id, Animation::Opacity)); | 2109 EXPECT_TRUE(controller_impl->GetAnimationById(animation_id)); |
| 2107 EXPECT_EQ( | 2110 EXPECT_EQ(Animation::WaitingForTargetAvailability, |
| 2108 Animation::WaitingForTargetAvailability, | 2111 controller_impl->GetAnimationById(animation_id)->run_state()); |
| 2109 controller_impl->GetAnimation(group_id, Animation::Opacity)->run_state()); | 2112 EXPECT_TRUE(controller_impl->GetAnimationById(animation_id) |
| 2110 EXPECT_TRUE(controller_impl->GetAnimation(group_id, Animation::Opacity) | |
| 2111 ->affects_pending_observers()); | 2113 ->affects_pending_observers()); |
| 2112 EXPECT_FALSE(controller_impl->GetAnimation(group_id, Animation::Opacity) | 2114 EXPECT_FALSE(controller_impl->GetAnimationById(animation_id) |
| 2113 ->affects_active_observers()); | 2115 ->affects_active_observers()); |
| 2114 | 2116 |
| 2115 controller_impl->Animate(kInitialTickTime); | 2117 controller_impl->Animate(kInitialTickTime); |
| 2116 | 2118 |
| 2117 // Since the animation hasn't been activated, only the pending observer | 2119 // Since the animation hasn't been activated, only the pending observer |
| 2118 // should have been ticked. | 2120 // should have been ticked. |
| 2119 EXPECT_EQ(0.5f, pending_dummy_impl.opacity()); | 2121 EXPECT_EQ(0.5f, pending_dummy_impl.opacity()); |
| 2120 EXPECT_EQ(0.f, dummy_impl.opacity()); | 2122 EXPECT_EQ(0.f, dummy_impl.opacity()); |
| 2121 | 2123 |
| 2122 controller_impl->ActivateAnimations(); | 2124 controller_impl->ActivateAnimations(); |
| 2123 EXPECT_TRUE(controller_impl->GetAnimation(group_id, Animation::Opacity) | 2125 EXPECT_TRUE(controller_impl->GetAnimationById(animation_id) |
| 2124 ->affects_pending_observers()); | 2126 ->affects_pending_observers()); |
| 2125 EXPECT_TRUE(controller_impl->GetAnimation(group_id, Animation::Opacity) | 2127 EXPECT_TRUE(controller_impl->GetAnimationById(animation_id) |
| 2126 ->affects_active_observers()); | 2128 ->affects_active_observers()); |
| 2127 | 2129 |
| 2128 controller_impl->UpdateState(true, events.get()); | 2130 controller_impl->UpdateState(true, events.get()); |
| 2129 | 2131 |
| 2130 // Since the animation has been activated, it should have reached the | 2132 // Since the animation has been activated, it should have reached the |
| 2131 // Running state. | 2133 // Running state. |
| 2132 EXPECT_EQ( | 2134 EXPECT_EQ(Animation::Running, |
| 2133 Animation::Running, | 2135 controller_impl->GetAnimationById(animation_id)->run_state()); |
| 2134 controller_impl->GetAnimation(group_id, Animation::Opacity)->run_state()); | |
| 2135 | 2136 |
| 2136 controller_impl->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(500)); | 2137 controller_impl->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(500)); |
| 2137 | 2138 |
| 2138 // Both observers should have been ticked. | 2139 // Both observers should have been ticked. |
| 2139 EXPECT_EQ(0.75f, pending_dummy_impl.opacity()); | 2140 EXPECT_EQ(0.75f, pending_dummy_impl.opacity()); |
| 2140 EXPECT_EQ(0.75f, dummy_impl.opacity()); | 2141 EXPECT_EQ(0.75f, dummy_impl.opacity()); |
| 2141 } | 2142 } |
| 2142 | 2143 |
| 2143 TEST(LayerAnimationControllerTest, ClippedOpacityValues) { | 2144 TEST(LayerAnimationControllerTest, ClippedOpacityValues) { |
| 2144 FakeLayerAnimationValueObserver dummy; | 2145 FakeLayerAnimationValueObserver dummy; |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2179 FakeInactiveLayerAnimationValueObserver pending_dummy_impl; | 2180 FakeInactiveLayerAnimationValueObserver pending_dummy_impl; |
| 2180 scoped_refptr<LayerAnimationController> controller_impl( | 2181 scoped_refptr<LayerAnimationController> controller_impl( |
| 2181 LayerAnimationController::Create(0)); | 2182 LayerAnimationController::Create(0)); |
| 2182 controller_impl->AddValueObserver(&dummy_impl); | 2183 controller_impl->AddValueObserver(&dummy_impl); |
| 2183 controller_impl->AddValueObserver(&pending_dummy_impl); | 2184 controller_impl->AddValueObserver(&pending_dummy_impl); |
| 2184 FakeLayerAnimationValueObserver dummy; | 2185 FakeLayerAnimationValueObserver dummy; |
| 2185 scoped_refptr<LayerAnimationController> controller( | 2186 scoped_refptr<LayerAnimationController> controller( |
| 2186 LayerAnimationController::Create(0)); | 2187 LayerAnimationController::Create(0)); |
| 2187 controller->AddValueObserver(&dummy); | 2188 controller->AddValueObserver(&dummy); |
| 2188 | 2189 |
| 2189 AddOpacityTransitionToController(controller.get(), 1, 0.5f, 1.f, true); | 2190 int animation_id = |
| 2190 int group_id = controller->GetAnimation(Animation::Opacity)->group(); | 2191 AddOpacityTransitionToController(controller.get(), 1, 0.5f, 1.f, true); |
| 2191 | 2192 |
| 2192 controller->PushAnimationUpdatesTo(controller_impl.get()); | 2193 controller->PushAnimationUpdatesTo(controller_impl.get()); |
| 2193 controller_impl->ActivateAnimations(); | 2194 controller_impl->ActivateAnimations(); |
| 2194 controller_impl->Animate(kInitialTickTime); | 2195 controller_impl->Animate(kInitialTickTime); |
| 2195 controller_impl->UpdateState(true, events.get()); | 2196 controller_impl->UpdateState(true, events.get()); |
| 2196 EXPECT_EQ( | 2197 EXPECT_EQ(Animation::Running, |
| 2197 Animation::Running, | 2198 controller_impl->GetAnimationById(animation_id)->run_state()); |
| 2198 controller_impl->GetAnimation(group_id, Animation::Opacity)->run_state()); | |
| 2199 EXPECT_EQ(0.5f, pending_dummy_impl.opacity()); | 2199 EXPECT_EQ(0.5f, pending_dummy_impl.opacity()); |
| 2200 EXPECT_EQ(0.5f, dummy_impl.opacity()); | 2200 EXPECT_EQ(0.5f, dummy_impl.opacity()); |
| 2201 | 2201 |
| 2202 EXPECT_TRUE(controller_impl->GetAnimation(group_id, Animation::Opacity) | 2202 EXPECT_TRUE(controller_impl->GetAnimationById(animation_id) |
| 2203 ->affects_pending_observers()); | 2203 ->affects_pending_observers()); |
| 2204 EXPECT_TRUE(controller_impl->GetAnimation(group_id, Animation::Opacity) | 2204 EXPECT_TRUE(controller_impl->GetAnimationById(animation_id) |
| 2205 ->affects_active_observers()); | 2205 ->affects_active_observers()); |
| 2206 | 2206 |
| 2207 // Delete the animation on the main-thread controller. | 2207 // Delete the animation on the main-thread controller. |
| 2208 controller->RemoveAnimation( | 2208 controller->RemoveAnimation( |
| 2209 controller->GetAnimation(Animation::Opacity)->id()); | 2209 controller->GetAnimation(Animation::Opacity)->id()); |
| 2210 controller->PushAnimationUpdatesTo(controller_impl.get()); | 2210 controller->PushAnimationUpdatesTo(controller_impl.get()); |
| 2211 | 2211 |
| 2212 // The animation should no longer affect pending observers. | 2212 // The animation should no longer affect pending observers. |
| 2213 EXPECT_FALSE(controller_impl->GetAnimation(group_id, Animation::Opacity) | 2213 EXPECT_FALSE(controller_impl->GetAnimationById(animation_id) |
| 2214 ->affects_pending_observers()); | 2214 ->affects_pending_observers()); |
| 2215 EXPECT_TRUE(controller_impl->GetAnimation(group_id, Animation::Opacity) | 2215 EXPECT_TRUE(controller_impl->GetAnimationById(animation_id) |
| 2216 ->affects_active_observers()); | 2216 ->affects_active_observers()); |
| 2217 | 2217 |
| 2218 controller_impl->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(500)); | 2218 controller_impl->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(500)); |
| 2219 controller_impl->UpdateState(true, events.get()); | 2219 controller_impl->UpdateState(true, events.get()); |
| 2220 | 2220 |
| 2221 // Only the active observer should have been ticked. | 2221 // Only the active observer should have been ticked. |
| 2222 EXPECT_EQ(0.5f, pending_dummy_impl.opacity()); | 2222 EXPECT_EQ(0.5f, pending_dummy_impl.opacity()); |
| 2223 EXPECT_EQ(0.75f, dummy_impl.opacity()); | 2223 EXPECT_EQ(0.75f, dummy_impl.opacity()); |
| 2224 | 2224 |
| 2225 controller_impl->ActivateAnimations(); | 2225 controller_impl->ActivateAnimations(); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 2237 FakeInactiveLayerAnimationValueObserver pending_dummy_impl; | 2237 FakeInactiveLayerAnimationValueObserver pending_dummy_impl; |
| 2238 scoped_refptr<LayerAnimationController> controller_impl( | 2238 scoped_refptr<LayerAnimationController> controller_impl( |
| 2239 LayerAnimationController::Create(0)); | 2239 LayerAnimationController::Create(0)); |
| 2240 controller_impl->AddValueObserver(&dummy_impl); | 2240 controller_impl->AddValueObserver(&dummy_impl); |
| 2241 controller_impl->AddValueObserver(&pending_dummy_impl); | 2241 controller_impl->AddValueObserver(&pending_dummy_impl); |
| 2242 FakeLayerAnimationValueObserver dummy; | 2242 FakeLayerAnimationValueObserver dummy; |
| 2243 scoped_refptr<LayerAnimationController> controller( | 2243 scoped_refptr<LayerAnimationController> controller( |
| 2244 LayerAnimationController::Create(0)); | 2244 LayerAnimationController::Create(0)); |
| 2245 controller->AddValueObserver(&dummy); | 2245 controller->AddValueObserver(&dummy); |
| 2246 | 2246 |
| 2247 AddOpacityTransitionToController(controller.get(), 1, 0.f, 1.f, true); | 2247 int first_animation_id = |
| 2248 int first_animation_group_id = | 2248 AddOpacityTransitionToController(controller.get(), 1, 0.f, 1.f, true); |
| 2249 controller->GetAnimation(Animation::Opacity)->group(); | |
| 2250 | 2249 |
| 2251 controller->PushAnimationUpdatesTo(controller_impl.get()); | 2250 controller->PushAnimationUpdatesTo(controller_impl.get()); |
| 2252 controller_impl->ActivateAnimations(); | 2251 controller_impl->ActivateAnimations(); |
| 2253 controller_impl->Animate(kInitialTickTime); | 2252 controller_impl->Animate(kInitialTickTime); |
| 2254 controller_impl->UpdateState(true, events.get()); | 2253 controller_impl->UpdateState(true, events.get()); |
| 2255 | 2254 |
| 2256 // Remove the first animation from the main-thread controller, and add a | 2255 // Remove the first animation from the main-thread controller, and add a |
| 2257 // new animation affecting the same property. | 2256 // new animation affecting the same property. |
| 2258 controller->RemoveAnimation( | 2257 controller->RemoveAnimation( |
| 2259 controller->GetAnimation(Animation::Opacity)->id()); | 2258 controller->GetAnimation(Animation::Opacity)->id()); |
| 2260 AddOpacityTransitionToController(controller.get(), 1, 1.f, 0.5f, true); | 2259 int second_animation_id = |
| 2261 int second_animation_group_id = | 2260 AddOpacityTransitionToController(controller.get(), 1, 1.f, 0.5f, true); |
| 2262 controller->GetAnimation(Animation::Opacity)->group(); | |
| 2263 controller->PushAnimationUpdatesTo(controller_impl.get()); | 2261 controller->PushAnimationUpdatesTo(controller_impl.get()); |
| 2264 | 2262 |
| 2265 // The original animation should only affect active observers, and the new | 2263 // The original animation should only affect active observers, and the new |
| 2266 // animation should only affect pending observers. | 2264 // animation should only affect pending observers. |
| 2267 EXPECT_FALSE(controller_impl->GetAnimation(first_animation_group_id, | 2265 EXPECT_FALSE(controller_impl->GetAnimationById(first_animation_id) |
| 2268 Animation::Opacity) | |
| 2269 ->affects_pending_observers()); | 2266 ->affects_pending_observers()); |
| 2270 EXPECT_TRUE(controller_impl->GetAnimation(first_animation_group_id, | 2267 EXPECT_TRUE(controller_impl->GetAnimationById(first_animation_id) |
| 2271 Animation::Opacity) | |
| 2272 ->affects_active_observers()); | 2268 ->affects_active_observers()); |
| 2273 EXPECT_TRUE(controller_impl->GetAnimation(second_animation_group_id, | 2269 EXPECT_TRUE(controller_impl->GetAnimationById(second_animation_id) |
| 2274 Animation::Opacity) | |
| 2275 ->affects_pending_observers()); | 2270 ->affects_pending_observers()); |
| 2276 EXPECT_FALSE(controller_impl->GetAnimation(second_animation_group_id, | 2271 EXPECT_FALSE(controller_impl->GetAnimationById(second_animation_id) |
| 2277 Animation::Opacity) | |
| 2278 ->affects_active_observers()); | 2272 ->affects_active_observers()); |
| 2279 | 2273 |
| 2280 controller_impl->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(500)); | 2274 controller_impl->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(500)); |
| 2281 controller_impl->UpdateState(true, events.get()); | 2275 controller_impl->UpdateState(true, events.get()); |
| 2282 | 2276 |
| 2283 // The original animation should still be running, and the new animation | 2277 // The original animation should still be running, and the new animation |
| 2284 // should be starting. | 2278 // should be starting. |
| 2285 EXPECT_EQ(Animation::Running, | 2279 EXPECT_EQ(Animation::Running, |
| 2286 controller_impl->GetAnimation(first_animation_group_id, | 2280 controller_impl->GetAnimationById(first_animation_id)->run_state()); |
| 2287 Animation::Opacity)->run_state()); | 2281 EXPECT_EQ( |
| 2288 EXPECT_EQ(Animation::Starting, | 2282 Animation::Starting, |
| 2289 controller_impl->GetAnimation(second_animation_group_id, | 2283 controller_impl->GetAnimationById(second_animation_id)->run_state()); |
| 2290 Animation::Opacity)->run_state()); | |
| 2291 | 2284 |
| 2292 // The active observer should have been ticked by the original animation, | 2285 // The active observer should have been ticked by the original animation, |
| 2293 // and the pending observer should have been ticked by the new animation. | 2286 // and the pending observer should have been ticked by the new animation. |
| 2294 EXPECT_EQ(1.f, pending_dummy_impl.opacity()); | 2287 EXPECT_EQ(1.f, pending_dummy_impl.opacity()); |
| 2295 EXPECT_EQ(0.5f, dummy_impl.opacity()); | 2288 EXPECT_EQ(0.5f, dummy_impl.opacity()); |
| 2296 | 2289 |
| 2297 controller_impl->ActivateAnimations(); | 2290 controller_impl->ActivateAnimations(); |
| 2298 | 2291 |
| 2299 // The original animation should have been deleted, and the new animation | 2292 // The original animation should have been deleted, and the new animation |
| 2300 // should now affect both observers. | 2293 // should now affect both observers. |
| 2301 EXPECT_FALSE(controller_impl->GetAnimation(first_animation_group_id, | 2294 EXPECT_FALSE(controller_impl->GetAnimationById(first_animation_id)); |
| 2302 Animation::Opacity)); | 2295 EXPECT_TRUE(controller_impl->GetAnimationById(second_animation_id) |
| 2303 EXPECT_TRUE(controller_impl->GetAnimation(second_animation_group_id, | |
| 2304 Animation::Opacity) | |
| 2305 ->affects_pending_observers()); | 2296 ->affects_pending_observers()); |
| 2306 EXPECT_TRUE(controller_impl->GetAnimation(second_animation_group_id, | 2297 EXPECT_TRUE(controller_impl->GetAnimationById(second_animation_id) |
| 2307 Animation::Opacity) | |
| 2308 ->affects_active_observers()); | 2298 ->affects_active_observers()); |
| 2309 | 2299 |
| 2310 controller_impl->Animate(kInitialTickTime + | 2300 controller_impl->Animate(kInitialTickTime + |
| 2311 TimeDelta::FromMilliseconds(1000)); | 2301 TimeDelta::FromMilliseconds(1000)); |
| 2312 controller_impl->UpdateState(true, events.get()); | 2302 controller_impl->UpdateState(true, events.get()); |
| 2313 | 2303 |
| 2314 // The new animation should be running, and the active observer should have | 2304 // The new animation should be running, and the active observer should have |
| 2315 // been ticked at the new animation's starting point. | 2305 // been ticked at the new animation's starting point. |
| 2316 EXPECT_EQ(Animation::Running, | 2306 EXPECT_EQ( |
| 2317 controller_impl->GetAnimation(second_animation_group_id, | 2307 Animation::Running, |
| 2318 Animation::Opacity)->run_state()); | 2308 controller_impl->GetAnimationById(second_animation_id)->run_state()); |
| 2319 EXPECT_EQ(1.f, pending_dummy_impl.opacity()); | 2309 EXPECT_EQ(1.f, pending_dummy_impl.opacity()); |
| 2320 EXPECT_EQ(1.f, dummy_impl.opacity()); | 2310 EXPECT_EQ(1.f, dummy_impl.opacity()); |
| 2321 } | 2311 } |
| 2322 | 2312 |
| 2323 TEST(LayerAnimationControllerTest, TestIsAnimatingProperty) { | 2313 TEST(LayerAnimationControllerTest, TestIsAnimatingProperty) { |
| 2324 FakeLayerAnimationValueObserver dummy; | 2314 FakeLayerAnimationValueObserver dummy; |
| 2325 scoped_refptr<LayerAnimationController> controller( | 2315 scoped_refptr<LayerAnimationController> controller( |
| 2326 LayerAnimationController::Create(0)); | 2316 LayerAnimationController::Create(0)); |
| 2327 controller->AddValueObserver(&dummy); | 2317 controller->AddValueObserver(&dummy); |
| 2328 | 2318 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2361 EXPECT_FALSE(controller->IsAnimatingProperty(Animation::Opacity)); | 2351 EXPECT_FALSE(controller->IsAnimatingProperty(Animation::Opacity)); |
| 2362 EXPECT_FALSE(controller->IsAnimatingProperty(Animation::Filter)); | 2352 EXPECT_FALSE(controller->IsAnimatingProperty(Animation::Filter)); |
| 2363 | 2353 |
| 2364 controller->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(2000)); | 2354 controller->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(2000)); |
| 2365 controller->UpdateState(true, nullptr); | 2355 controller->UpdateState(true, nullptr); |
| 2366 EXPECT_TRUE(controller->IsAnimatingProperty(Animation::Opacity)); | 2356 EXPECT_TRUE(controller->IsAnimatingProperty(Animation::Opacity)); |
| 2367 } | 2357 } |
| 2368 | 2358 |
| 2369 } // namespace | 2359 } // namespace |
| 2370 } // namespace cc | 2360 } // namespace cc |
| OLD | NEW |