| 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/layer_tree_host.h" | 5 #include "cc/layer_tree_host.h" |
| 6 | 6 |
| 7 #include "cc/animation_curve.h" | 7 #include "cc/animation_curve.h" |
| 8 #include "cc/layer.h" | 8 #include "cc/layer.h" |
| 9 #include "cc/layer_animation_controller.h" | 9 #include "cc/layer_animation_controller.h" |
| 10 #include "cc/layer_impl.h" | 10 #include "cc/layer_impl.h" |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 117 , received_animation_started_notification_(false) | 117 , received_animation_started_notification_(false) |
| 118 , start_time_(0) { | 118 , start_time_(0) { |
| 119 } | 119 } |
| 120 | 120 |
| 121 virtual void beginTest() OVERRIDE { | 121 virtual void beginTest() OVERRIDE { |
| 122 postAddInstantAnimationToMainThread(); | 122 postAddInstantAnimationToMainThread(); |
| 123 } | 123 } |
| 124 | 124 |
| 125 virtual void animateLayers( | 125 virtual void animateLayers( |
| 126 LayerTreeHostImpl* impl_host, | 126 LayerTreeHostImpl* impl_host, |
| 127 base::TimeTicks monotonic_time) OVERRIDE { | 127 base::TimeTicks monotonic_time, |
| 128 bool hasUnfinishedAnimation) OVERRIDE { |
| 128 if (!num_animates_) { | 129 if (!num_animates_) { |
| 129 // The animation had zero duration so layerTreeHostImpl should no | 130 // The animation had zero duration so layerTreeHostImpl should no |
| 130 // longer need to animate its layers. | 131 // longer need to animate its layers. |
| 131 EXPECT_FALSE(impl_host->needsAnimateLayers()); | 132 EXPECT_FALSE(hasUnfinishedAnimation); |
| 132 num_animates_++; | 133 num_animates_++; |
| 133 first_monotonic_time_ = monotonic_time; | 134 first_monotonic_time_ = monotonic_time; |
| 134 return; | 135 return; |
| 135 } | 136 } |
| 136 EXPECT_LT(0, start_time_); | 137 EXPECT_LT(0, start_time_); |
| 137 EXPECT_TRUE(received_animation_started_notification_); | 138 EXPECT_TRUE(received_animation_started_notification_); |
| 138 endTest(); | 139 endTest(); |
| 139 } | 140 } |
| 140 | 141 |
| 141 virtual void notifyAnimationStarted(double wall_clock_time) OVERRIDE { | 142 virtual void notifyAnimationStarted(double wall_clock_time) OVERRIDE { |
| (...skipping 20 matching lines...) Expand all Loading... |
| 162 LayerTreeHostAnimationTestCheckerboardDoesNotStarveDraws() | 163 LayerTreeHostAnimationTestCheckerboardDoesNotStarveDraws() |
| 163 : started_animating_(false) { | 164 : started_animating_(false) { |
| 164 } | 165 } |
| 165 | 166 |
| 166 virtual void beginTest() OVERRIDE { | 167 virtual void beginTest() OVERRIDE { |
| 167 postAddAnimationToMainThread(m_layerTreeHost->rootLayer()); | 168 postAddAnimationToMainThread(m_layerTreeHost->rootLayer()); |
| 168 } | 169 } |
| 169 | 170 |
| 170 virtual void animateLayers( | 171 virtual void animateLayers( |
| 171 LayerTreeHostImpl* host_impl, | 172 LayerTreeHostImpl* host_impl, |
| 172 base::TimeTicks monotonicTime) OVERRIDE { | 173 base::TimeTicks monotonicTime, |
| 174 bool hasUnfinishedAnimation) OVERRIDE { |
| 173 started_animating_ = true; | 175 started_animating_ = true; |
| 174 } | 176 } |
| 175 | 177 |
| 176 virtual void drawLayersOnThread(LayerTreeHostImpl*) OVERRIDE { | 178 virtual void drawLayersOnThread(LayerTreeHostImpl*) OVERRIDE { |
| 177 if (started_animating_) | 179 if (started_animating_) |
| 178 endTest(); | 180 endTest(); |
| 179 } | 181 } |
| 180 | 182 |
| 181 virtual bool prepareToDrawOnThread(LayerTreeHostImpl*) OVERRIDE { | 183 virtual bool prepareToDrawOnThread(LayerTreeHostImpl*) OVERRIDE { |
| 182 return false; | 184 return false; |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 235 public LayerTreeHostAnimationTest { | 237 public LayerTreeHostAnimationTest { |
| 236 public: | 238 public: |
| 237 LayerTreeHostAnimationTestAddAnimationWithTimingFunction() {} | 239 LayerTreeHostAnimationTestAddAnimationWithTimingFunction() {} |
| 238 | 240 |
| 239 virtual void beginTest() OVERRIDE { | 241 virtual void beginTest() OVERRIDE { |
| 240 postAddAnimationToMainThread(m_layerTreeHost->rootLayer()); | 242 postAddAnimationToMainThread(m_layerTreeHost->rootLayer()); |
| 241 } | 243 } |
| 242 | 244 |
| 243 virtual void animateLayers( | 245 virtual void animateLayers( |
| 244 LayerTreeHostImpl* host_impl, | 246 LayerTreeHostImpl* host_impl, |
| 245 base::TimeTicks monotonicTime) OVERRIDE { | 247 base::TimeTicks monotonicTime, |
| 248 bool hasUnfinishedAnimation) OVERRIDE { |
| 246 LayerAnimationController* controller = | 249 LayerAnimationController* controller = |
| 247 m_layerTreeHost->rootLayer()->layerAnimationController(); | 250 m_layerTreeHost->rootLayer()->layerAnimationController(); |
| 248 ActiveAnimation* animation = | 251 ActiveAnimation* animation = |
| 249 controller->getActiveAnimation(0, ActiveAnimation::Opacity); | 252 controller->getActiveAnimation(0, ActiveAnimation::Opacity); |
| 250 if (!animation) | 253 if (!animation) |
| 251 return; | 254 return; |
| 252 | 255 |
| 253 const FloatAnimationCurve* curve = | 256 const FloatAnimationCurve* curve = |
| 254 animation->curve()->toFloatAnimationCurve(); | 257 animation->curve()->toFloatAnimationCurve(); |
| 255 float startOpacity = curve->getValue(0); | 258 float startOpacity = curve->getValue(0); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 299 controller->getActiveAnimation(0, ActiveAnimation::Opacity); | 302 controller->getActiveAnimation(0, ActiveAnimation::Opacity); |
| 300 main_start_time_ = animation->startTime(); | 303 main_start_time_ = animation->startTime(); |
| 301 controller->removeAnimation(animation->id()); | 304 controller->removeAnimation(animation->id()); |
| 302 | 305 |
| 303 if (impl_start_time_ > 0) | 306 if (impl_start_time_ > 0) |
| 304 endTest(); | 307 endTest(); |
| 305 } | 308 } |
| 306 | 309 |
| 307 virtual void animateLayers( | 310 virtual void animateLayers( |
| 308 LayerTreeHostImpl* impl_host, | 311 LayerTreeHostImpl* impl_host, |
| 309 base::TimeTicks monotonicTime) OVERRIDE { | 312 base::TimeTicks monotonicTime, |
| 313 bool hasUnfinishedAnimation) OVERRIDE { |
| 310 LayerAnimationController* controller = | 314 LayerAnimationController* controller = |
| 311 impl_host->rootLayer()->layerAnimationController(); | 315 impl_host->rootLayer()->layerAnimationController(); |
| 312 ActiveAnimation* animation = | 316 ActiveAnimation* animation = |
| 313 controller->getActiveAnimation(0, ActiveAnimation::Opacity); | 317 controller->getActiveAnimation(0, ActiveAnimation::Opacity); |
| 314 if (!animation) | 318 if (!animation) |
| 315 return; | 319 return; |
| 316 | 320 |
| 317 impl_start_time_ = animation->startTime(); | 321 impl_start_time_ = animation->startTime(); |
| 318 controller->removeAnimation(animation->id()); | 322 controller->removeAnimation(animation->id()); |
| 319 | 323 |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 395 }; | 399 }; |
| 396 | 400 |
| 397 MULTI_THREAD_TEST_F( | 401 MULTI_THREAD_TEST_F( |
| 398 LayerTreeHostAnimationTestDoNotSkipLayersWithAnimatedOpacity) | 402 LayerTreeHostAnimationTestDoNotSkipLayersWithAnimatedOpacity) |
| 399 | 403 |
| 400 // Layers added to tree with existing active animations should have the | 404 // Layers added to tree with existing active animations should have the |
| 401 // animation correctly recognized. | 405 // animation correctly recognized. |
| 402 class LayerTreeHostAnimationTestLayerAddedWithAnimation : | 406 class LayerTreeHostAnimationTestLayerAddedWithAnimation : |
| 403 public LayerTreeHostAnimationTest { | 407 public LayerTreeHostAnimationTest { |
| 404 public: | 408 public: |
| 405 LayerTreeHostAnimationTestLayerAddedWithAnimation() | 409 LayerTreeHostAnimationTestLayerAddedWithAnimation() { } |
| 406 : added_animation_(false) { | 410 |
| 411 virtual void beginTest() OVERRIDE { |
| 412 postSetNeedsCommitToMainThread(); |
| 407 } | 413 } |
| 408 | 414 |
| 409 virtual void beginTest() OVERRIDE { | 415 virtual void didCommit() OVERRIDE { |
| 410 EXPECT_FALSE(added_animation_); | 416 if (m_layerTreeHost->commitNumber() == 1) { |
| 417 scoped_refptr<Layer> layer = Layer::create(); |
| 418 layer->setLayerAnimationDelegate(this); |
| 411 | 419 |
| 412 scoped_refptr<Layer> layer = Layer::create(); | 420 // Any valid AnimationCurve will do here. |
| 413 layer->setLayerAnimationDelegate(this); | 421 scoped_ptr<AnimationCurve> curve(EaseTimingFunction::create()); |
| 422 scoped_ptr<ActiveAnimation> animation( |
| 423 ActiveAnimation::create(curve.Pass(), 1, 1, |
| 424 ActiveAnimation::Opacity)); |
| 425 layer->layerAnimationController()->addAnimation(animation.Pass()); |
| 414 | 426 |
| 415 // Any valid AnimationCurve will do here. | 427 // We add the animation *before* attaching the layer to the tree. |
| 416 scoped_ptr<AnimationCurve> curve(EaseTimingFunction::create()); | 428 m_layerTreeHost->rootLayer()->addChild(layer); |
| 417 scoped_ptr<ActiveAnimation> animation( | 429 } |
| 418 ActiveAnimation::create(curve.Pass(), 1, 1, ActiveAnimation::Opacity)); | 430 } |
| 419 layer->layerAnimationController()->addAnimation(animation.Pass()); | |
| 420 | 431 |
| 421 // We add the animation *before* attaching the layer to the tree. | 432 virtual void animateLayers( |
| 422 m_layerTreeHost->rootLayer()->addChild(layer); | 433 LayerTreeHostImpl* impl_host, |
| 423 EXPECT_TRUE(added_animation_); | 434 base::TimeTicks monotonic_time, |
| 424 | 435 bool hasUnfinishedAnimation) OVERRIDE { |
| 425 endTest(); | 436 endTest(); |
| 426 } | 437 } |
| 427 | 438 |
| 428 virtual void didAddAnimation() OVERRIDE { | |
| 429 added_animation_ = true; | |
| 430 } | |
| 431 | |
| 432 virtual void afterTest() OVERRIDE {} | 439 virtual void afterTest() OVERRIDE {} |
| 433 | |
| 434 private: | |
| 435 bool added_animation_; | |
| 436 }; | 440 }; |
| 437 | 441 |
| 438 SINGLE_AND_MULTI_THREAD_TEST_F( | 442 SINGLE_AND_MULTI_THREAD_TEST_F( |
| 439 LayerTreeHostAnimationTestLayerAddedWithAnimation) | 443 LayerTreeHostAnimationTestLayerAddedWithAnimation) |
| 440 | 444 |
| 441 class LayerTreeHostAnimationTestCompositeAndReadbackAnimateCount : | 445 class LayerTreeHostAnimationTestCompositeAndReadbackAnimateCount : |
| 442 public LayerTreeHostAnimationTest { | 446 public LayerTreeHostAnimationTest { |
| 443 public: | 447 public: |
| 444 LayerTreeHostAnimationTestCompositeAndReadbackAnimateCount() | 448 LayerTreeHostAnimationTestCompositeAndReadbackAnimateCount() |
| 445 : animated_commit_(-1) { | 449 : animated_commit_(-1) { |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 528 | 532 |
| 529 private: | 533 private: |
| 530 int num_commit_complete_; | 534 int num_commit_complete_; |
| 531 int num_draw_layers_; | 535 int num_draw_layers_; |
| 532 }; | 536 }; |
| 533 | 537 |
| 534 MULTI_THREAD_TEST_F(LayerTreeHostAnimationTestContinuousAnimate) | 538 MULTI_THREAD_TEST_F(LayerTreeHostAnimationTestContinuousAnimate) |
| 535 | 539 |
| 536 } // namespace | 540 } // namespace |
| 537 } // namespace cc | 541 } // namespace cc |
| OLD | NEW |