| 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 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 286 controller_impl->UpdateState(true, events.get()); | 286 controller_impl->UpdateState(true, events.get()); |
| 287 | 287 |
| 288 // There should be a Started event for the animation. | 288 // There should be a Started event for the animation. |
| 289 EXPECT_EQ(1u, events->size()); | 289 EXPECT_EQ(1u, events->size()); |
| 290 EXPECT_EQ(AnimationEvent::Started, (*events)[0].type); | 290 EXPECT_EQ(AnimationEvent::Started, (*events)[0].type); |
| 291 controller->NotifyAnimationStarted((*events)[0], 0.0); | 291 controller->NotifyAnimationStarted((*events)[0], 0.0); |
| 292 | 292 |
| 293 controller->Animate(1.0); | 293 controller->Animate(1.0); |
| 294 controller->UpdateState(true, NULL); | 294 controller->UpdateState(true, NULL); |
| 295 | 295 |
| 296 EXPECT_FALSE(dummy.animation_waiting_for_deletion()); |
| 297 EXPECT_FALSE(dummy_impl.animation_waiting_for_deletion()); |
| 298 |
| 296 events.reset(new AnimationEventsVector); | 299 events.reset(new AnimationEventsVector); |
| 297 controller_impl->Animate(2.0); | 300 controller_impl->Animate(2.0); |
| 298 controller_impl->UpdateState(true, events.get()); | 301 controller_impl->UpdateState(true, events.get()); |
| 299 | 302 |
| 303 EXPECT_TRUE(dummy_impl.animation_waiting_for_deletion()); |
| 304 |
| 300 // There should be a Finished event for the animation. | 305 // There should be a Finished event for the animation. |
| 301 EXPECT_EQ(1u, events->size()); | 306 EXPECT_EQ(1u, events->size()); |
| 302 EXPECT_EQ(AnimationEvent::Finished, (*events)[0].type); | 307 EXPECT_EQ(AnimationEvent::Finished, (*events)[0].type); |
| 303 | 308 |
| 304 // Neither controller should have deleted the animation yet. | 309 // Neither controller should have deleted the animation yet. |
| 305 EXPECT_TRUE(controller->GetAnimation(Animation::Opacity)); | 310 EXPECT_TRUE(controller->GetAnimation(Animation::Opacity)); |
| 306 EXPECT_TRUE(controller_impl->GetAnimation(Animation::Opacity)); | 311 EXPECT_TRUE(controller_impl->GetAnimation(Animation::Opacity)); |
| 307 | 312 |
| 308 controller->NotifyAnimationFinished((*events)[0], 0.0); | 313 controller->NotifyAnimationFinished((*events)[0], 0.0); |
| 309 | 314 |
| 310 controller->Animate(3.0); | 315 controller->Animate(3.0); |
| 311 controller->UpdateState(true, NULL); | 316 controller->UpdateState(true, NULL); |
| 317 EXPECT_TRUE(dummy.animation_waiting_for_deletion()); |
| 312 | 318 |
| 313 controller->PushAnimationUpdatesTo(controller_impl.get()); | 319 controller->PushAnimationUpdatesTo(controller_impl.get()); |
| 314 | 320 |
| 315 // Both controllers should now have deleted the animation. | 321 // Both controllers should now have deleted the animation. |
| 316 EXPECT_FALSE(controller->has_any_animation()); | 322 EXPECT_FALSE(controller->has_any_animation()); |
| 317 EXPECT_FALSE(controller_impl->has_any_animation()); | 323 EXPECT_FALSE(controller_impl->has_any_animation()); |
| 318 } | 324 } |
| 319 | 325 |
| 320 // Tests that transitioning opacity from 0 to 1 works as expected. | 326 // Tests that transitioning opacity from 0 to 1 works as expected. |
| 321 | 327 |
| (...skipping 811 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1133 controller->Animate(1.0); | 1139 controller->Animate(1.0); |
| 1134 controller->UpdateState(true, events.get()); | 1140 controller->UpdateState(true, events.get()); |
| 1135 EXPECT_TRUE(controller->HasActiveAnimation()); | 1141 EXPECT_TRUE(controller->HasActiveAnimation()); |
| 1136 EXPECT_EQ(1.f, dummy.opacity()); | 1142 EXPECT_EQ(1.f, dummy.opacity()); |
| 1137 controller->Animate(2.0); | 1143 controller->Animate(2.0); |
| 1138 controller->UpdateState(true, events.get()); | 1144 controller->UpdateState(true, events.get()); |
| 1139 EXPECT_TRUE(!controller->HasActiveAnimation()); | 1145 EXPECT_TRUE(!controller->HasActiveAnimation()); |
| 1140 EXPECT_EQ(0.75f, dummy.opacity()); | 1146 EXPECT_EQ(0.75f, dummy.opacity()); |
| 1141 } | 1147 } |
| 1142 | 1148 |
| 1143 TEST(LayerAnimationControllerTest, ForceSyncWhenSynchronizedStartTimeNeeded) { | 1149 TEST(LayerAnimationControllerTest, PushUpdatesWhenSynchronizedStartTimeNeeded) { |
| 1144 FakeLayerAnimationValueObserver dummy_impl; | 1150 FakeLayerAnimationValueObserver dummy_impl; |
| 1145 scoped_refptr<LayerAnimationController> controller_impl( | 1151 scoped_refptr<LayerAnimationController> controller_impl( |
| 1146 LayerAnimationController::Create(0)); | 1152 LayerAnimationController::Create(0)); |
| 1147 controller_impl->AddValueObserver(&dummy_impl); | 1153 controller_impl->AddValueObserver(&dummy_impl); |
| 1148 scoped_ptr<AnimationEventsVector> events( | 1154 scoped_ptr<AnimationEventsVector> events( |
| 1149 make_scoped_ptr(new AnimationEventsVector)); | 1155 make_scoped_ptr(new AnimationEventsVector)); |
| 1150 FakeLayerAnimationValueObserver dummy; | 1156 FakeLayerAnimationValueObserver dummy; |
| 1151 scoped_refptr<LayerAnimationController> controller( | 1157 scoped_refptr<LayerAnimationController> controller( |
| 1152 LayerAnimationController::Create(0)); | 1158 LayerAnimationController::Create(0)); |
| 1153 controller->AddValueObserver(&dummy); | 1159 controller->AddValueObserver(&dummy); |
| 1154 | 1160 |
| 1155 scoped_ptr<Animation> to_add(CreateAnimation( | 1161 scoped_ptr<Animation> to_add(CreateAnimation( |
| 1156 scoped_ptr<AnimationCurve>(new FakeFloatTransition(2.0, 0.f, 1.f)).Pass(), | 1162 scoped_ptr<AnimationCurve>(new FakeFloatTransition(2.0, 0.f, 1.f)).Pass(), |
| 1157 0, | 1163 0, |
| 1158 Animation::Opacity)); | 1164 Animation::Opacity)); |
| 1159 to_add->set_needs_synchronized_start_time(true); | 1165 to_add->set_needs_synchronized_start_time(true); |
| 1160 controller->AddAnimation(to_add.Pass()); | 1166 controller->AddAnimation(to_add.Pass()); |
| 1161 | 1167 |
| 1162 controller->Animate(0.0); | 1168 controller->Animate(0.0); |
| 1163 controller->UpdateState(true, events.get()); | 1169 controller->UpdateState(true, events.get()); |
| 1164 EXPECT_TRUE(controller->HasActiveAnimation()); | 1170 EXPECT_TRUE(controller->HasActiveAnimation()); |
| 1165 Animation* active_animation = controller->GetAnimation(0, Animation::Opacity); | 1171 Animation* active_animation = controller->GetAnimation(0, Animation::Opacity); |
| 1166 EXPECT_TRUE(active_animation); | 1172 EXPECT_TRUE(active_animation); |
| 1167 EXPECT_TRUE(active_animation->needs_synchronized_start_time()); | 1173 EXPECT_TRUE(active_animation->needs_synchronized_start_time()); |
| 1168 | 1174 |
| 1169 controller->set_force_sync(); | |
| 1170 | |
| 1171 controller->PushAnimationUpdatesTo(controller_impl.get()); | 1175 controller->PushAnimationUpdatesTo(controller_impl.get()); |
| 1172 | 1176 |
| 1173 active_animation = controller_impl->GetAnimation(0, Animation::Opacity); | 1177 active_animation = controller_impl->GetAnimation(0, Animation::Opacity); |
| 1174 EXPECT_TRUE(active_animation); | 1178 EXPECT_TRUE(active_animation); |
| 1175 EXPECT_EQ(Animation::WaitingForTargetAvailability, | 1179 EXPECT_EQ(Animation::WaitingForTargetAvailability, |
| 1176 active_animation->run_state()); | 1180 active_animation->run_state()); |
| 1177 } | 1181 } |
| 1178 | 1182 |
| 1179 // Tests that skipping a call to UpdateState works as expected. | 1183 // Tests that skipping a call to UpdateState works as expected. |
| 1180 TEST(LayerAnimationControllerTest, SkipUpdateState) { | 1184 TEST(LayerAnimationControllerTest, SkipUpdateState) { |
| (...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1430 | 1434 |
| 1431 AddOpacityTransitionToController(controller.get(), 1.0, 0.f, 1.f, false); | 1435 AddOpacityTransitionToController(controller.get(), 1.0, 0.f, 1.f, false); |
| 1432 int group_id = controller->GetAnimation(Animation::Opacity)->group(); | 1436 int group_id = controller->GetAnimation(Animation::Opacity)->group(); |
| 1433 | 1437 |
| 1434 controller->PushAnimationUpdatesTo(controller_impl.get()); | 1438 controller->PushAnimationUpdatesTo(controller_impl.get()); |
| 1435 EXPECT_TRUE(controller_impl->GetAnimation(group_id, Animation::Opacity)); | 1439 EXPECT_TRUE(controller_impl->GetAnimation(group_id, Animation::Opacity)); |
| 1436 | 1440 |
| 1437 controller->AbortAnimations(Animation::Opacity); | 1441 controller->AbortAnimations(Animation::Opacity); |
| 1438 EXPECT_EQ(Animation::Aborted, | 1442 EXPECT_EQ(Animation::Aborted, |
| 1439 controller->GetAnimation(Animation::Opacity)->run_state()); | 1443 controller->GetAnimation(Animation::Opacity)->run_state()); |
| 1444 EXPECT_FALSE(dummy.animation_waiting_for_deletion()); |
| 1445 EXPECT_FALSE(dummy_impl.animation_waiting_for_deletion()); |
| 1440 | 1446 |
| 1441 controller->Animate(1.0); | 1447 controller->Animate(1.0); |
| 1442 controller->UpdateState(true, NULL); | 1448 controller->UpdateState(true, NULL); |
| 1449 EXPECT_TRUE(dummy.animation_waiting_for_deletion()); |
| 1443 EXPECT_EQ(Animation::WaitingForDeletion, | 1450 EXPECT_EQ(Animation::WaitingForDeletion, |
| 1444 controller->GetAnimation(Animation::Opacity)->run_state()); | 1451 controller->GetAnimation(Animation::Opacity)->run_state()); |
| 1445 | 1452 |
| 1446 controller->PushAnimationUpdatesTo(controller_impl.get()); | 1453 controller->PushAnimationUpdatesTo(controller_impl.get()); |
| 1447 EXPECT_FALSE(controller->GetAnimation(group_id, Animation::Opacity)); | 1454 EXPECT_FALSE(controller->GetAnimation(group_id, Animation::Opacity)); |
| 1448 EXPECT_FALSE(controller_impl->GetAnimation(group_id, Animation::Opacity)); | 1455 EXPECT_FALSE(controller_impl->GetAnimation(group_id, Animation::Opacity)); |
| 1449 } | 1456 } |
| 1450 | 1457 |
| 1451 // An animation aborted on the impl thread should get deleted on both threads. | 1458 // An animation aborted on the impl thread should get deleted on both threads. |
| 1452 TEST(LayerAnimationControllerTest, ImplThreadAbortedAnimationGetsDeleted) { | 1459 TEST(LayerAnimationControllerTest, ImplThreadAbortedAnimationGetsDeleted) { |
| 1453 FakeLayerAnimationValueObserver dummy_impl; | 1460 FakeLayerAnimationValueObserver dummy_impl; |
| 1454 scoped_refptr<LayerAnimationController> controller_impl( | 1461 scoped_refptr<LayerAnimationController> controller_impl( |
| 1455 LayerAnimationController::Create(0)); | 1462 LayerAnimationController::Create(0)); |
| 1456 controller_impl->AddValueObserver(&dummy_impl); | 1463 controller_impl->AddValueObserver(&dummy_impl); |
| 1457 FakeLayerAnimationValueObserver dummy; | 1464 FakeLayerAnimationValueObserver dummy; |
| 1458 scoped_refptr<LayerAnimationController> controller( | 1465 scoped_refptr<LayerAnimationController> controller( |
| 1459 LayerAnimationController::Create(0)); | 1466 LayerAnimationController::Create(0)); |
| 1460 controller->AddValueObserver(&dummy); | 1467 controller->AddValueObserver(&dummy); |
| 1461 | 1468 |
| 1462 AddOpacityTransitionToController(controller.get(), 1.0, 0.f, 1.f, false); | 1469 AddOpacityTransitionToController(controller.get(), 1.0, 0.f, 1.f, false); |
| 1463 int group_id = controller->GetAnimation(Animation::Opacity)->group(); | 1470 int group_id = controller->GetAnimation(Animation::Opacity)->group(); |
| 1464 | 1471 |
| 1465 controller->PushAnimationUpdatesTo(controller_impl.get()); | 1472 controller->PushAnimationUpdatesTo(controller_impl.get()); |
| 1466 EXPECT_TRUE(controller_impl->GetAnimation(group_id, Animation::Opacity)); | 1473 EXPECT_TRUE(controller_impl->GetAnimation(group_id, Animation::Opacity)); |
| 1467 | 1474 |
| 1468 controller_impl->AbortAnimations(Animation::Opacity); | 1475 controller_impl->AbortAnimations(Animation::Opacity); |
| 1469 EXPECT_EQ(Animation::Aborted, | 1476 EXPECT_EQ(Animation::Aborted, |
| 1470 controller_impl->GetAnimation(Animation::Opacity)->run_state()); | 1477 controller_impl->GetAnimation(Animation::Opacity)->run_state()); |
| 1478 EXPECT_FALSE(dummy.animation_waiting_for_deletion()); |
| 1479 EXPECT_FALSE(dummy_impl.animation_waiting_for_deletion()); |
| 1471 | 1480 |
| 1472 AnimationEventsVector events; | 1481 AnimationEventsVector events; |
| 1473 controller_impl->Animate(1.0); | 1482 controller_impl->Animate(1.0); |
| 1474 controller_impl->UpdateState(true, &events); | 1483 controller_impl->UpdateState(true, &events); |
| 1484 EXPECT_TRUE(dummy_impl.animation_waiting_for_deletion()); |
| 1475 EXPECT_EQ(1u, events.size()); | 1485 EXPECT_EQ(1u, events.size()); |
| 1476 EXPECT_EQ(AnimationEvent::Aborted, events[0].type); | 1486 EXPECT_EQ(AnimationEvent::Aborted, events[0].type); |
| 1477 EXPECT_EQ(Animation::WaitingForDeletion, | 1487 EXPECT_EQ(Animation::WaitingForDeletion, |
| 1478 controller_impl->GetAnimation(Animation::Opacity)->run_state()); | 1488 controller_impl->GetAnimation(Animation::Opacity)->run_state()); |
| 1479 | 1489 |
| 1480 controller->NotifyAnimationAborted(events[0]); | 1490 controller->NotifyAnimationAborted(events[0]); |
| 1481 EXPECT_EQ(Animation::Aborted, | 1491 EXPECT_EQ(Animation::Aborted, |
| 1482 controller->GetAnimation(Animation::Opacity)->run_state()); | 1492 controller->GetAnimation(Animation::Opacity)->run_state()); |
| 1483 | 1493 |
| 1484 controller->Animate(1.5); | 1494 controller->Animate(1.5); |
| 1485 controller->UpdateState(true, NULL); | 1495 controller->UpdateState(true, NULL); |
| 1496 EXPECT_TRUE(dummy.animation_waiting_for_deletion()); |
| 1486 EXPECT_EQ(Animation::WaitingForDeletion, | 1497 EXPECT_EQ(Animation::WaitingForDeletion, |
| 1487 controller->GetAnimation(Animation::Opacity)->run_state()); | 1498 controller->GetAnimation(Animation::Opacity)->run_state()); |
| 1488 | 1499 |
| 1489 controller->PushAnimationUpdatesTo(controller_impl.get()); | 1500 controller->PushAnimationUpdatesTo(controller_impl.get()); |
| 1490 EXPECT_FALSE(controller->GetAnimation(group_id, Animation::Opacity)); | 1501 EXPECT_FALSE(controller->GetAnimation(group_id, Animation::Opacity)); |
| 1491 EXPECT_FALSE(controller_impl->GetAnimation(group_id, Animation::Opacity)); | 1502 EXPECT_FALSE(controller_impl->GetAnimation(group_id, Animation::Opacity)); |
| 1492 } | 1503 } |
| 1493 | 1504 |
| 1494 // Ensure that we only generate Finished events for animations in a group | 1505 // Ensure that we only generate Finished events for animations in a group |
| 1495 // once all animations in that group are finished. | 1506 // once all animations in that group are finished. |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1580 // animation, and an Aborted event for the opacity animation. | 1591 // animation, and an Aborted event for the opacity animation. |
| 1581 EXPECT_EQ(2u, events->size()); | 1592 EXPECT_EQ(2u, events->size()); |
| 1582 EXPECT_EQ(AnimationEvent::Finished, (*events)[0].type); | 1593 EXPECT_EQ(AnimationEvent::Finished, (*events)[0].type); |
| 1583 EXPECT_EQ(Animation::Transform, (*events)[0].target_property); | 1594 EXPECT_EQ(Animation::Transform, (*events)[0].target_property); |
| 1584 EXPECT_EQ(AnimationEvent::Aborted, (*events)[1].type); | 1595 EXPECT_EQ(AnimationEvent::Aborted, (*events)[1].type); |
| 1585 EXPECT_EQ(Animation::Opacity, (*events)[1].target_property); | 1596 EXPECT_EQ(Animation::Opacity, (*events)[1].target_property); |
| 1586 } | 1597 } |
| 1587 | 1598 |
| 1588 } // namespace | 1599 } // namespace |
| 1589 } // namespace cc | 1600 } // namespace cc |
| OLD | NEW |