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/keyframed_animation_curve.h" | 10 #include "cc/animation/keyframed_animation_curve.h" |
(...skipping 1255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1266 0.0, operations3, scoped_ptr<TimingFunction>())); | 1266 0.0, operations3, scoped_ptr<TimingFunction>())); |
1267 operations3.AppendMatrix(transform3); | 1267 operations3.AppendMatrix(transform3); |
1268 curve3->AddKeyframe(TransformKeyframe::Create( | 1268 curve3->AddKeyframe(TransformKeyframe::Create( |
1269 1.0, operations3, scoped_ptr<TimingFunction>())); | 1269 1.0, operations3, scoped_ptr<TimingFunction>())); |
1270 animation = Animation::Create( | 1270 animation = Animation::Create( |
1271 curve3.PassAs<AnimationCurve>(), 3, 3, Animation::Transform); | 1271 curve3.PassAs<AnimationCurve>(), 3, 3, Animation::Transform); |
1272 controller_impl->AddAnimation(animation.Pass()); | 1272 controller_impl->AddAnimation(animation.Pass()); |
1273 EXPECT_FALSE(controller_impl->AnimatedBoundsForBox(box, &bounds)); | 1273 EXPECT_FALSE(controller_impl->AnimatedBoundsForBox(box, &bounds)); |
1274 } | 1274 } |
1275 | 1275 |
| 1276 // Tests that AbortAnimations aborts all animations targeting the specified |
| 1277 // property. |
| 1278 TEST(LayerAnimationControllerTest, AbortAnimations) { |
| 1279 FakeLayerAnimationValueObserver dummy; |
| 1280 scoped_refptr<LayerAnimationController> controller( |
| 1281 LayerAnimationController::Create(0)); |
| 1282 controller->AddValueObserver(&dummy); |
| 1283 |
| 1284 // Start with several animations, and allow some of them to reach the finished |
| 1285 // state. |
| 1286 controller->AddAnimation(CreateAnimation( |
| 1287 scoped_ptr<AnimationCurve>(new FakeTransformTransition(1.0)).Pass(), |
| 1288 1, |
| 1289 Animation::Transform)); |
| 1290 controller->AddAnimation(CreateAnimation( |
| 1291 scoped_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)).Pass(), |
| 1292 2, |
| 1293 Animation::Opacity)); |
| 1294 controller->AddAnimation(CreateAnimation( |
| 1295 scoped_ptr<AnimationCurve>(new FakeTransformTransition(1.0)).Pass(), |
| 1296 3, |
| 1297 Animation::Transform)); |
| 1298 controller->AddAnimation(CreateAnimation( |
| 1299 scoped_ptr<AnimationCurve>(new FakeTransformTransition(2.0)).Pass(), |
| 1300 4, |
| 1301 Animation::Transform)); |
| 1302 controller->AddAnimation(CreateAnimation( |
| 1303 scoped_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)).Pass(), |
| 1304 5, |
| 1305 Animation::Opacity)); |
| 1306 |
| 1307 controller->Animate(1.0); |
| 1308 controller->UpdateState(true, NULL); |
| 1309 controller->Animate(2.0); |
| 1310 controller->UpdateState(true, NULL); |
| 1311 |
| 1312 EXPECT_EQ(Animation::Finished, |
| 1313 controller->GetAnimation(1, Animation::Transform)->run_state()); |
| 1314 EXPECT_EQ(Animation::Finished, |
| 1315 controller->GetAnimation(2, Animation::Opacity)->run_state()); |
| 1316 EXPECT_EQ(Animation::Running, |
| 1317 controller->GetAnimation(3, Animation::Transform)->run_state()); |
| 1318 EXPECT_EQ(Animation::WaitingForTargetAvailability, |
| 1319 controller->GetAnimation(4, Animation::Transform)->run_state()); |
| 1320 EXPECT_EQ(Animation::Running, |
| 1321 controller->GetAnimation(5, Animation::Opacity)->run_state()); |
| 1322 |
| 1323 controller->AbortAnimations(Animation::Transform); |
| 1324 |
| 1325 // Only un-finished Transform animations should have been aborted. |
| 1326 EXPECT_EQ(Animation::Finished, |
| 1327 controller->GetAnimation(1, Animation::Transform)->run_state()); |
| 1328 EXPECT_EQ(Animation::Finished, |
| 1329 controller->GetAnimation(2, Animation::Opacity)->run_state()); |
| 1330 EXPECT_EQ(Animation::Aborted, |
| 1331 controller->GetAnimation(3, Animation::Transform)->run_state()); |
| 1332 EXPECT_EQ(Animation::Aborted, |
| 1333 controller->GetAnimation(4, Animation::Transform)->run_state()); |
| 1334 EXPECT_EQ(Animation::Running, |
| 1335 controller->GetAnimation(5, Animation::Opacity)->run_state()); |
| 1336 } |
| 1337 |
| 1338 // An animation aborted on the main thread should get deleted on both threads. |
| 1339 TEST(LayerAnimationControllerTest, MainThreadAbortedAnimationGetsDeleted) { |
| 1340 FakeLayerAnimationValueObserver dummy_impl; |
| 1341 scoped_refptr<LayerAnimationController> controller_impl( |
| 1342 LayerAnimationController::Create(0)); |
| 1343 controller_impl->AddValueObserver(&dummy_impl); |
| 1344 FakeLayerAnimationValueObserver dummy; |
| 1345 scoped_refptr<LayerAnimationController> controller( |
| 1346 LayerAnimationController::Create(0)); |
| 1347 controller->AddValueObserver(&dummy); |
| 1348 |
| 1349 AddOpacityTransitionToController(controller.get(), 1.0, 0.f, 1.f, false); |
| 1350 int group_id = controller->GetAnimation(Animation::Opacity)->group(); |
| 1351 |
| 1352 controller->PushAnimationUpdatesTo(controller_impl.get()); |
| 1353 EXPECT_TRUE(controller_impl->GetAnimation(group_id, Animation::Opacity)); |
| 1354 |
| 1355 controller->AbortAnimations(Animation::Opacity); |
| 1356 EXPECT_EQ(Animation::Aborted, |
| 1357 controller->GetAnimation(Animation::Opacity)->run_state()); |
| 1358 |
| 1359 controller->Animate(1.0); |
| 1360 controller->UpdateState(true, NULL); |
| 1361 EXPECT_EQ(Animation::WaitingForDeletion, |
| 1362 controller->GetAnimation(Animation::Opacity)->run_state()); |
| 1363 |
| 1364 controller->PushAnimationUpdatesTo(controller_impl.get()); |
| 1365 EXPECT_FALSE(controller->GetAnimation(group_id, Animation::Opacity)); |
| 1366 EXPECT_FALSE(controller_impl->GetAnimation(group_id, Animation::Opacity)); |
| 1367 } |
| 1368 |
| 1369 // An animation aborted on the impl thread should get deleted on both threads. |
| 1370 TEST(LayerAnimationControllerTest, ImplThreadAbortedAnimationGetsDeleted) { |
| 1371 FakeLayerAnimationValueObserver dummy_impl; |
| 1372 scoped_refptr<LayerAnimationController> controller_impl( |
| 1373 LayerAnimationController::Create(0)); |
| 1374 controller_impl->AddValueObserver(&dummy_impl); |
| 1375 FakeLayerAnimationValueObserver dummy; |
| 1376 scoped_refptr<LayerAnimationController> controller( |
| 1377 LayerAnimationController::Create(0)); |
| 1378 controller->AddValueObserver(&dummy); |
| 1379 |
| 1380 AddOpacityTransitionToController(controller.get(), 1.0, 0.f, 1.f, false); |
| 1381 int group_id = controller->GetAnimation(Animation::Opacity)->group(); |
| 1382 |
| 1383 controller->PushAnimationUpdatesTo(controller_impl.get()); |
| 1384 EXPECT_TRUE(controller_impl->GetAnimation(group_id, Animation::Opacity)); |
| 1385 |
| 1386 controller_impl->AbortAnimations(Animation::Opacity); |
| 1387 EXPECT_EQ(Animation::Aborted, |
| 1388 controller_impl->GetAnimation(Animation::Opacity)->run_state()); |
| 1389 |
| 1390 AnimationEventsVector events; |
| 1391 controller_impl->Animate(1.0); |
| 1392 controller_impl->UpdateState(true, &events); |
| 1393 EXPECT_EQ(1u, events.size()); |
| 1394 EXPECT_EQ(AnimationEvent::Aborted, events[0].type); |
| 1395 EXPECT_EQ(Animation::WaitingForDeletion, |
| 1396 controller_impl->GetAnimation(Animation::Opacity)->run_state()); |
| 1397 |
| 1398 controller->NotifyAnimationAborted(events[0]); |
| 1399 EXPECT_EQ(Animation::Aborted, |
| 1400 controller->GetAnimation(Animation::Opacity)->run_state()); |
| 1401 |
| 1402 controller->Animate(1.5); |
| 1403 controller->UpdateState(true, NULL); |
| 1404 EXPECT_EQ(Animation::WaitingForDeletion, |
| 1405 controller->GetAnimation(Animation::Opacity)->run_state()); |
| 1406 |
| 1407 controller->PushAnimationUpdatesTo(controller_impl.get()); |
| 1408 EXPECT_FALSE(controller->GetAnimation(group_id, Animation::Opacity)); |
| 1409 EXPECT_FALSE(controller_impl->GetAnimation(group_id, Animation::Opacity)); |
| 1410 } |
| 1411 |
1276 } // namespace | 1412 } // namespace |
1277 } // namespace cc | 1413 } // namespace cc |
OLD | NEW |