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/trees/layer_tree_host.h" | 5 #include "cc/trees/layer_tree_host.h" |
6 | 6 |
7 #include "cc/animation/animation_curve.h" | 7 #include "cc/animation/animation_curve.h" |
8 #include "cc/animation/layer_animation_controller.h" | 8 #include "cc/animation/layer_animation_controller.h" |
9 #include "cc/animation/scroll_offset_animation_curve.h" | 9 #include "cc/animation/scroll_offset_animation_curve.h" |
10 #include "cc/animation/timing_function.h" | 10 #include "cc/animation/timing_function.h" |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
109 LayerTreeHostAnimationTestSetNeedsAnimateInsideAnimationCallback); | 109 LayerTreeHostAnimationTestSetNeedsAnimateInsideAnimationCallback); |
110 | 110 |
111 // Add a layer animation and confirm that | 111 // Add a layer animation and confirm that |
112 // LayerTreeHostImpl::updateAnimationState does get called and continues to | 112 // LayerTreeHostImpl::updateAnimationState does get called and continues to |
113 // get called. | 113 // get called. |
114 class LayerTreeHostAnimationTestAddAnimation | 114 class LayerTreeHostAnimationTestAddAnimation |
115 : public LayerTreeHostAnimationTest { | 115 : public LayerTreeHostAnimationTest { |
116 public: | 116 public: |
117 LayerTreeHostAnimationTestAddAnimation() | 117 LayerTreeHostAnimationTestAddAnimation() |
118 : num_animates_(0), | 118 : num_animates_(0), |
119 received_animation_started_notification_(false), | 119 received_animation_started_notification_(false) { |
120 start_time_(0.0) { | |
121 } | 120 } |
122 | 121 |
123 virtual void BeginTest() OVERRIDE { | 122 virtual void BeginTest() OVERRIDE { |
124 PostAddInstantAnimationToMainThread(layer_tree_host()->root_layer()); | 123 PostAddInstantAnimationToMainThread(layer_tree_host()->root_layer()); |
125 } | 124 } |
126 | 125 |
127 virtual void UpdateAnimationState( | 126 virtual void UpdateAnimationState( |
128 LayerTreeHostImpl* host_impl, | 127 LayerTreeHostImpl* host_impl, |
129 bool has_unfinished_animation) OVERRIDE { | 128 bool has_unfinished_animation) OVERRIDE { |
130 if (!num_animates_) { | 129 if (!num_animates_) { |
131 // The animation had zero duration so LayerTreeHostImpl should no | 130 // The animation had zero duration so LayerTreeHostImpl should no |
132 // longer need to animate its layers. | 131 // longer need to animate its layers. |
133 EXPECT_FALSE(has_unfinished_animation); | 132 EXPECT_FALSE(has_unfinished_animation); |
134 num_animates_++; | 133 num_animates_++; |
135 return; | 134 return; |
136 } | 135 } |
137 | 136 |
138 if (received_animation_started_notification_) { | 137 if (received_animation_started_notification_) { |
139 EXPECT_LT(0.0, start_time_); | 138 EXPECT_LT(base::TimeTicks(), start_time_); |
140 | 139 |
141 LayerAnimationController* controller_impl = | 140 LayerAnimationController* controller_impl = |
142 host_impl->active_tree()->root_layer()->layer_animation_controller(); | 141 host_impl->active_tree()->root_layer()->layer_animation_controller(); |
143 Animation* animation_impl = | 142 Animation* animation_impl = |
144 controller_impl->GetAnimation(Animation::Opacity); | 143 controller_impl->GetAnimation(Animation::Opacity); |
145 if (animation_impl) | 144 if (animation_impl) |
146 controller_impl->RemoveAnimation(animation_impl->id()); | 145 controller_impl->RemoveAnimation(animation_impl->id()); |
147 | 146 |
148 EndTest(); | 147 EndTest(); |
149 } | 148 } |
150 } | 149 } |
151 | 150 |
152 virtual void NotifyAnimationStarted(double wall_clock_time) OVERRIDE { | 151 virtual void NotifyAnimationStarted( |
| 152 double wall_clock_time, |
| 153 base::TimeTicks monotonic_time, |
| 154 Animation::TargetProperty target_property) OVERRIDE { |
153 received_animation_started_notification_ = true; | 155 received_animation_started_notification_ = true; |
154 start_time_ = wall_clock_time; | 156 start_time_ = monotonic_time; |
155 if (num_animates_) { | 157 if (num_animates_) { |
156 EXPECT_LT(0.0, start_time_); | 158 EXPECT_LT(base::TimeTicks(), start_time_); |
157 | 159 |
158 LayerAnimationController* controller = | 160 LayerAnimationController* controller = |
159 layer_tree_host()->root_layer()->layer_animation_controller(); | 161 layer_tree_host()->root_layer()->layer_animation_controller(); |
160 Animation* animation = | 162 Animation* animation = |
161 controller->GetAnimation(Animation::Opacity); | 163 controller->GetAnimation(Animation::Opacity); |
162 if (animation) | 164 if (animation) |
163 controller->RemoveAnimation(animation->id()); | 165 controller->RemoveAnimation(animation->id()); |
164 | 166 |
165 EndTest(); | 167 EndTest(); |
166 } | 168 } |
167 } | 169 } |
168 | 170 |
169 virtual void AfterTest() OVERRIDE {} | 171 virtual void AfterTest() OVERRIDE {} |
170 | 172 |
171 private: | 173 private: |
172 int num_animates_; | 174 int num_animates_; |
173 bool received_animation_started_notification_; | 175 bool received_animation_started_notification_; |
174 double start_time_; | 176 base::TimeTicks start_time_; |
175 }; | 177 }; |
176 | 178 |
177 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostAnimationTestAddAnimation); | 179 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostAnimationTestAddAnimation); |
178 | 180 |
179 // Add a layer animation to a layer, but continually fail to draw. Confirm that | 181 // Add a layer animation to a layer, but continually fail to draw. Confirm that |
180 // after a while, we do eventually force a draw. | 182 // after a while, we do eventually force a draw. |
181 class LayerTreeHostAnimationTestCheckerboardDoesNotStarveDraws | 183 class LayerTreeHostAnimationTestCheckerboardDoesNotStarveDraws |
182 : public LayerTreeHostAnimationTest { | 184 : public LayerTreeHostAnimationTest { |
183 public: | 185 public: |
184 LayerTreeHostAnimationTestCheckerboardDoesNotStarveDraws() | 186 LayerTreeHostAnimationTestCheckerboardDoesNotStarveDraws() |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
233 active_animation_controllers().empty(); | 235 active_animation_controllers().empty(); |
234 if (!started_animating_ && have_animations) { | 236 if (!started_animating_ && have_animations) { |
235 started_animating_ = true; | 237 started_animating_ = true; |
236 return; | 238 return; |
237 } | 239 } |
238 | 240 |
239 if (started_animating_ && !have_animations) | 241 if (started_animating_ && !have_animations) |
240 EndTest(); | 242 EndTest(); |
241 } | 243 } |
242 | 244 |
243 virtual void NotifyAnimationFinished(double time) OVERRIDE { | 245 virtual void NotifyAnimationFinished( |
| 246 double wall_clock_time, |
| 247 base::TimeTicks monotonic_time, |
| 248 Animation::TargetProperty target_property) OVERRIDE { |
244 // Animations on the impl-side controller only get deleted during a commit, | 249 // Animations on the impl-side controller only get deleted during a commit, |
245 // so we need to schedule a commit. | 250 // so we need to schedule a commit. |
246 layer_tree_host()->SetNeedsCommit(); | 251 layer_tree_host()->SetNeedsCommit(); |
247 } | 252 } |
248 | 253 |
249 virtual void AfterTest() OVERRIDE {} | 254 virtual void AfterTest() OVERRIDE {} |
250 | 255 |
251 private: | 256 private: |
252 bool started_animating_; | 257 bool started_animating_; |
253 }; | 258 }; |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
303 : active_tree_was_animated_(false) {} | 308 : active_tree_was_animated_(false) {} |
304 | 309 |
305 virtual base::TimeDelta LowFrequencyAnimationInterval() const OVERRIDE { | 310 virtual base::TimeDelta LowFrequencyAnimationInterval() const OVERRIDE { |
306 return base::TimeDelta::FromMilliseconds(4); | 311 return base::TimeDelta::FromMilliseconds(4); |
307 } | 312 } |
308 | 313 |
309 virtual void BeginTest() OVERRIDE { | 314 virtual void BeginTest() OVERRIDE { |
310 PostAddAnimationToMainThread(layer_tree_host()->root_layer()); | 315 PostAddAnimationToMainThread(layer_tree_host()->root_layer()); |
311 } | 316 } |
312 | 317 |
313 virtual void NotifyAnimationFinished(double time) OVERRIDE { | 318 virtual void NotifyAnimationFinished( |
| 319 double wall_clock_time, |
| 320 base::TimeTicks monotonic_time, |
| 321 Animation::TargetProperty target_property) OVERRIDE { |
314 // Replace animated commits with an empty tree. | 322 // Replace animated commits with an empty tree. |
315 layer_tree_host()->SetRootLayer(make_scoped_refptr<Layer>(NULL)); | 323 layer_tree_host()->SetRootLayer(make_scoped_refptr<Layer>(NULL)); |
316 } | 324 } |
317 | 325 |
318 virtual void DidCommit() OVERRIDE { | 326 virtual void DidCommit() OVERRIDE { |
319 // This alternates setting an empty tree and a non-empty tree with an | 327 // This alternates setting an empty tree and a non-empty tree with an |
320 // animation. | 328 // animation. |
321 switch (layer_tree_host()->source_frame_number()) { | 329 switch (layer_tree_host()->source_frame_number()) { |
322 case 1: | 330 case 1: |
323 // Wait for NotifyAnimationFinished to commit an empty tree. | 331 // Wait for NotifyAnimationFinished to commit an empty tree. |
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
493 content_ = FakeContentLayer::Create(&client_); | 501 content_ = FakeContentLayer::Create(&client_); |
494 content_->SetBounds(gfx::Size(4, 4)); | 502 content_->SetBounds(gfx::Size(4, 4)); |
495 content_->set_layer_animation_delegate(this); | 503 content_->set_layer_animation_delegate(this); |
496 layer_tree_host()->root_layer()->AddChild(content_); | 504 layer_tree_host()->root_layer()->AddChild(content_); |
497 } | 505 } |
498 | 506 |
499 virtual void BeginTest() OVERRIDE { | 507 virtual void BeginTest() OVERRIDE { |
500 PostAddAnimationToMainThread(content_.get()); | 508 PostAddAnimationToMainThread(content_.get()); |
501 } | 509 } |
502 | 510 |
503 virtual void NotifyAnimationStarted(double time) OVERRIDE { | 511 virtual void NotifyAnimationStarted( |
| 512 double wall_clock_time, |
| 513 base::TimeTicks monotonic_time, |
| 514 Animation::TargetProperty target_property) OVERRIDE { |
504 LayerAnimationController* controller = | 515 LayerAnimationController* controller = |
505 layer_tree_host()->root_layer()->children()[0]-> | 516 layer_tree_host()->root_layer()->children()[0]-> |
506 layer_animation_controller(); | 517 layer_animation_controller(); |
507 Animation* animation = | 518 Animation* animation = |
508 controller->GetAnimation(Animation::Opacity); | 519 controller->GetAnimation(Animation::Opacity); |
509 main_start_time_ = animation->start_time(); | 520 main_start_time_ = animation->start_time(); |
510 controller->RemoveAnimation(animation->id()); | 521 controller->RemoveAnimation(animation->id()); |
511 | 522 |
512 if (impl_start_time_ > 0.0) | 523 if (impl_start_time_ > 0.0) |
513 EndTest(); | 524 EndTest(); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
548 // Ensures that notify animation finished is called. | 559 // Ensures that notify animation finished is called. |
549 class LayerTreeHostAnimationTestAnimationFinishedEvents | 560 class LayerTreeHostAnimationTestAnimationFinishedEvents |
550 : public LayerTreeHostAnimationTest { | 561 : public LayerTreeHostAnimationTest { |
551 public: | 562 public: |
552 LayerTreeHostAnimationTestAnimationFinishedEvents() {} | 563 LayerTreeHostAnimationTestAnimationFinishedEvents() {} |
553 | 564 |
554 virtual void BeginTest() OVERRIDE { | 565 virtual void BeginTest() OVERRIDE { |
555 PostAddInstantAnimationToMainThread(layer_tree_host()->root_layer()); | 566 PostAddInstantAnimationToMainThread(layer_tree_host()->root_layer()); |
556 } | 567 } |
557 | 568 |
558 virtual void NotifyAnimationFinished(double time) OVERRIDE { | 569 virtual void NotifyAnimationFinished( |
| 570 double wall_clock_time, |
| 571 base::TimeTicks monotonic_time, |
| 572 Animation::TargetProperty target_property) OVERRIDE { |
559 LayerAnimationController* controller = | 573 LayerAnimationController* controller = |
560 layer_tree_host()->root_layer()->layer_animation_controller(); | 574 layer_tree_host()->root_layer()->layer_animation_controller(); |
561 Animation* animation = | 575 Animation* animation = |
562 controller->GetAnimation(Animation::Opacity); | 576 controller->GetAnimation(Animation::Opacity); |
563 if (animation) | 577 if (animation) |
564 controller->RemoveAnimation(animation->id()); | 578 controller->RemoveAnimation(animation->id()); |
565 EndTest(); | 579 EndTest(); |
566 } | 580 } |
567 | 581 |
568 virtual void AfterTest() OVERRIDE {} | 582 virtual void AfterTest() OVERRIDE {} |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
764 content_->SetBounds(gfx::Size(4, 4)); | 778 content_->SetBounds(gfx::Size(4, 4)); |
765 content_->set_layer_animation_delegate(this); | 779 content_->set_layer_animation_delegate(this); |
766 layer_tree_host()->root_layer()->AddChild(content_); | 780 layer_tree_host()->root_layer()->AddChild(content_); |
767 } | 781 } |
768 | 782 |
769 virtual void BeginTest() OVERRIDE { | 783 virtual void BeginTest() OVERRIDE { |
770 layer_tree_host()->SetViewportSize(gfx::Size()); | 784 layer_tree_host()->SetViewportSize(gfx::Size()); |
771 PostAddAnimationToMainThread(content_.get()); | 785 PostAddAnimationToMainThread(content_.get()); |
772 } | 786 } |
773 | 787 |
774 virtual void NotifyAnimationStarted(double wall_clock_time) OVERRIDE { | 788 virtual void NotifyAnimationStarted( |
| 789 double wall_clock_time, |
| 790 base::TimeTicks monotonic_time, |
| 791 Animation::TargetProperty target_property) OVERRIDE { |
775 started_times_++; | 792 started_times_++; |
776 } | 793 } |
777 | 794 |
778 virtual void NotifyAnimationFinished(double wall_clock_time) OVERRIDE { | 795 virtual void NotifyAnimationFinished( |
| 796 double wall_clock_time, |
| 797 base::TimeTicks monotonic_time, |
| 798 Animation::TargetProperty target_property) OVERRIDE { |
779 EndTest(); | 799 EndTest(); |
780 } | 800 } |
781 | 801 |
782 virtual void AfterTest() OVERRIDE { | 802 virtual void AfterTest() OVERRIDE { |
783 EXPECT_EQ(1, started_times_); | 803 EXPECT_EQ(1, started_times_); |
784 } | 804 } |
785 | 805 |
786 private: | 806 private: |
787 int started_times_; | 807 int started_times_; |
788 FakeContentLayerClient client_; | 808 FakeContentLayerClient client_; |
(...skipping 21 matching lines...) Expand all Loading... |
810 virtual void BeginTest() OVERRIDE { | 830 virtual void BeginTest() OVERRIDE { |
811 visible_ = true; | 831 visible_ = true; |
812 PostAddAnimationToMainThread(content_.get()); | 832 PostAddAnimationToMainThread(content_.get()); |
813 } | 833 } |
814 | 834 |
815 virtual void DidCommit() OVERRIDE { | 835 virtual void DidCommit() OVERRIDE { |
816 visible_ = false; | 836 visible_ = false; |
817 layer_tree_host()->SetVisible(false); | 837 layer_tree_host()->SetVisible(false); |
818 } | 838 } |
819 | 839 |
820 virtual void NotifyAnimationStarted(double wall_clock_time) OVERRIDE { | 840 virtual void NotifyAnimationStarted( |
| 841 double wall_clock_time, |
| 842 base::TimeTicks monotonic_time, |
| 843 Animation::TargetProperty target_property) OVERRIDE { |
821 EXPECT_FALSE(visible_); | 844 EXPECT_FALSE(visible_); |
822 started_times_++; | 845 started_times_++; |
823 } | 846 } |
824 | 847 |
825 virtual void NotifyAnimationFinished(double wall_clock_time) OVERRIDE { | 848 virtual void NotifyAnimationFinished( |
| 849 double wall_clock_time, |
| 850 base::TimeTicks monotonic_time, |
| 851 Animation::TargetProperty target_property) OVERRIDE { |
826 EXPECT_FALSE(visible_); | 852 EXPECT_FALSE(visible_); |
827 EXPECT_EQ(1, started_times_); | 853 EXPECT_EQ(1, started_times_); |
828 EndTest(); | 854 EndTest(); |
829 } | 855 } |
830 | 856 |
831 virtual void AfterTest() OVERRIDE {} | 857 virtual void AfterTest() OVERRIDE {} |
832 | 858 |
833 private: | 859 private: |
834 bool visible_; | 860 bool visible_; |
835 int started_times_; | 861 int started_times_; |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
887 added_animations_++; | 913 added_animations_++; |
888 break; | 914 break; |
889 case 2: | 915 case 2: |
890 // This second animation will not be drawn so it should not start. | 916 // This second animation will not be drawn so it should not start. |
891 AddAnimatedTransformToLayer(content_.get(), 0.1, 5, 5); | 917 AddAnimatedTransformToLayer(content_.get(), 0.1, 5, 5); |
892 added_animations_++; | 918 added_animations_++; |
893 break; | 919 break; |
894 } | 920 } |
895 } | 921 } |
896 | 922 |
897 virtual void NotifyAnimationStarted(double wall_clock_time) OVERRIDE { | 923 virtual void NotifyAnimationStarted( |
| 924 double wall_clock_time, |
| 925 base::TimeTicks monotonic_time, |
| 926 Animation::TargetProperty target_property) OVERRIDE { |
898 if (TestEnded()) | 927 if (TestEnded()) |
899 return; | 928 return; |
900 started_times_++; | 929 started_times_++; |
901 } | 930 } |
902 | 931 |
903 virtual void NotifyAnimationFinished(double wall_clock_time) OVERRIDE { | 932 virtual void NotifyAnimationFinished( |
| 933 double wall_clock_time, |
| 934 base::TimeTicks monotonic_time, |
| 935 Animation::TargetProperty target_property) OVERRIDE { |
904 // We should be checkerboarding already, but it should still finish the | 936 // We should be checkerboarding already, but it should still finish the |
905 // first animation. | 937 // first animation. |
906 EXPECT_EQ(2, added_animations_); | 938 EXPECT_EQ(2, added_animations_); |
907 finished_times_++; | 939 finished_times_++; |
908 EndTest(); | 940 EndTest(); |
909 } | 941 } |
910 | 942 |
911 virtual void AfterTest() OVERRIDE { | 943 virtual void AfterTest() OVERRIDE { |
912 // Make sure we tried to draw the second animation but failed. | 944 // Make sure we tried to draw the second animation but failed. |
913 EXPECT_LT(0, prevented_draw_); | 945 EXPECT_LT(0, prevented_draw_); |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
976 FakeContentLayerClient client_; | 1008 FakeContentLayerClient client_; |
977 scoped_refptr<FakeContentLayer> scroll_layer_; | 1009 scoped_refptr<FakeContentLayer> scroll_layer_; |
978 }; | 1010 }; |
979 | 1011 |
980 // SingleThreadProxy doesn't send scroll updates from LayerTreeHostImpl to | 1012 // SingleThreadProxy doesn't send scroll updates from LayerTreeHostImpl to |
981 // LayerTreeHost. | 1013 // LayerTreeHost. |
982 MULTI_THREAD_TEST_F(LayerTreeHostAnimationTestScrollOffsetChangesArePropagated); | 1014 MULTI_THREAD_TEST_F(LayerTreeHostAnimationTestScrollOffsetChangesArePropagated); |
983 | 1015 |
984 } // namespace | 1016 } // namespace |
985 } // namespace cc | 1017 } // namespace cc |
OLD | NEW |