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_animation_controller.h" | 5 #include "cc/layer_animation_controller.h" |
6 | 6 |
7 #include "cc/animation.h" | 7 #include "cc/animation.h" |
8 #include "cc/animation_curve.h" | 8 #include "cc/animation_curve.h" |
9 #include "cc/keyframed_animation_curve.h" | 9 #include "cc/keyframed_animation_curve.h" |
10 #include "cc/test/animation_test_common.h" | 10 #include "cc/test/animation_test_common.h" |
11 #include "cc/transform_operations.h" | 11 #include "cc/transform_operations.h" |
12 #include "testing/gmock/include/gmock/gmock.h" | 12 #include "testing/gmock/include/gmock/gmock.h" |
13 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
14 #include "ui/gfx/transform.h" | 14 #include "ui/gfx/transform.h" |
15 | 15 |
16 namespace cc { | 16 namespace cc { namespace { |
jamesr
2013/03/09 02:44:56
this one's busted too
danakj
2013/03/09 03:01:11
Done.
| |
17 namespace { | 17 |
18 | 18 void ExpectTranslateX(double translate_x, const gfx::Transform& matrix) { |
19 void expectTranslateX(double translateX, const gfx::Transform& matrix) | 19 EXPECT_FLOAT_EQ(translate_x, matrix.matrix().getDouble(0, 3)); } |
20 { | 20 |
21 EXPECT_FLOAT_EQ(translateX, matrix.matrix().getDouble(0, 3)); | 21 scoped_ptr<Animation> CreateAnimation(scoped_ptr<AnimationCurve> curve, |
22 } | 22 int id, |
23 | 23 Animation::TargetProperty property) { |
24 scoped_ptr<Animation> createAnimation(scoped_ptr<AnimationCurve> curve, int id, Animation::TargetProperty property) | 24 return Animation::Create(curve.Pass(), 0, id, property); |
25 { | 25 } |
26 return Animation::create(curve.Pass(), 0, id, property); | 26 |
27 } | 27 TEST(LayerAnimationControllerTest, SyncNewAnimation) { |
28 | 28 FakeLayerAnimationValueObserver dummy_impl; |
29 TEST(LayerAnimationControllerTest, syncNewAnimation) | 29 scoped_refptr<LayerAnimationController> controller_impl( |
30 { | 30 LayerAnimationController::Create(0)); |
31 FakeLayerAnimationValueObserver dummyImpl; | 31 controller_impl->AddObserver(&dummy_impl); |
32 scoped_refptr<LayerAnimationController> controllerImpl(LayerAnimationControl ler::create(0)); | 32 FakeLayerAnimationValueObserver dummy; |
33 controllerImpl->addObserver(&dummyImpl); | 33 scoped_refptr<LayerAnimationController> controller( |
34 FakeLayerAnimationValueObserver dummy; | 34 LayerAnimationController::Create(0)); |
35 scoped_refptr<LayerAnimationController> controller(LayerAnimationController: :create(0)); | 35 controller->AddObserver(&dummy); |
36 controller->addObserver(&dummy); | 36 |
37 | 37 EXPECT_FALSE(controller_impl->GetAnimation(0, Animation::Opacity)); |
38 EXPECT_FALSE(controllerImpl->getAnimation(0, Animation::Opacity)); | 38 |
39 | 39 addOpacityTransitionToController(*controller, 1, 0, 1, false); |
40 addOpacityTransitionToController(*controller, 1, 0, 1, false); | 40 |
41 | 41 controller->PushAnimationUpdatesTo(controller_impl.get()); |
42 controller->pushAnimationUpdatesTo(controllerImpl.get()); | 42 |
43 | 43 EXPECT_TRUE(controller_impl->GetAnimation(0, Animation::Opacity)); |
44 EXPECT_TRUE(controllerImpl->getAnimation(0, Animation::Opacity)); | 44 EXPECT_EQ(Animation::WaitingForTargetAvailability, |
45 EXPECT_EQ(Animation::WaitingForTargetAvailability, controllerImpl->getAnimat ion(0, Animation::Opacity)->runState()); | 45 controller_impl->GetAnimation(0, Animation::Opacity)->run_state()); |
46 } | 46 } |
47 | 47 |
48 // If an animation is started on the impl thread before it is ticked on the main | 48 // If an animation is started on the impl thread before it is ticked on the main |
49 // thread, we must be sure to respect the synchronized start time. | 49 // thread, we must be sure to respect the synchronized start time. |
50 TEST(LayerAnimationControllerTest, doNotClobberStartTimes) | 50 TEST(LayerAnimationControllerTest, DoNotClobberStartTimes) { |
51 { | 51 FakeLayerAnimationValueObserver dummy_impl; |
52 FakeLayerAnimationValueObserver dummyImpl; | 52 scoped_refptr<LayerAnimationController> controller_impl( |
53 scoped_refptr<LayerAnimationController> controllerImpl(LayerAnimationControl ler::create(0)); | 53 LayerAnimationController::Create(0)); |
54 controllerImpl->addObserver(&dummyImpl); | 54 controller_impl->AddObserver(&dummy_impl); |
55 FakeLayerAnimationValueObserver dummy; | 55 FakeLayerAnimationValueObserver dummy; |
56 scoped_refptr<LayerAnimationController> controller(LayerAnimationController: :create(0)); | 56 scoped_refptr<LayerAnimationController> controller( |
57 controller->addObserver(&dummy); | 57 LayerAnimationController::Create(0)); |
58 | 58 controller->AddObserver(&dummy); |
59 EXPECT_FALSE(controllerImpl->getAnimation(0, Animation::Opacity)); | 59 |
60 | 60 EXPECT_FALSE(controller_impl->GetAnimation(0, Animation::Opacity)); |
61 addOpacityTransitionToController(*controller, 1, 0, 1, false); | 61 |
62 | 62 addOpacityTransitionToController(*controller, 1, 0, 1, false); |
63 controller->pushAnimationUpdatesTo(controllerImpl.get()); | 63 |
64 | 64 controller->PushAnimationUpdatesTo(controller_impl.get()); |
65 EXPECT_TRUE(controllerImpl->getAnimation(0, Animation::Opacity)); | 65 |
66 EXPECT_EQ(Animation::WaitingForTargetAvailability, controllerImpl->getAnimat ion(0, Animation::Opacity)->runState()); | 66 EXPECT_TRUE(controller_impl->GetAnimation(0, Animation::Opacity)); |
67 | 67 EXPECT_EQ(Animation::WaitingForTargetAvailability, |
68 AnimationEventsVector events; | 68 controller_impl->GetAnimation(0, Animation::Opacity)->run_state()); |
69 controllerImpl->animate(1); | 69 |
70 controllerImpl->updateState(&events); | 70 AnimationEventsVector events; |
71 | 71 controller_impl->Animate(1.0); |
72 // Synchronize the start times. | 72 controller_impl->UpdateState(&events); |
73 EXPECT_EQ(1u, events.size()); | 73 |
74 controller->OnAnimationStarted(events[0]); | 74 // Synchronize the start times. |
75 EXPECT_EQ(controller->getAnimation(0, Animation::Opacity)->startTime(), cont rollerImpl->getAnimation(0, Animation::Opacity)->startTime()); | 75 EXPECT_EQ(1u, events.size()); |
76 | 76 controller->OnAnimationStarted(events[0]); |
77 // Start the animation on the main thread. Should not affect the start time. | 77 EXPECT_EQ(controller->GetAnimation(0, Animation::Opacity)->start_time(), |
78 controller->animate(1.5); | 78 controller_impl->GetAnimation(0, Animation::Opacity)->start_time()); |
79 controller->updateState(0); | 79 |
80 EXPECT_EQ(controller->getAnimation(0, Animation::Opacity)->startTime(), cont rollerImpl->getAnimation(0, Animation::Opacity)->startTime()); | 80 // Start the animation on the main thread. Should not affect the start time. |
81 } | 81 controller->Animate(1.5); |
82 | 82 controller->UpdateState(NULL); |
83 TEST(LayerAnimationControllerTest, syncPauseAndResume) | 83 EXPECT_EQ(controller->GetAnimation(0, Animation::Opacity)->start_time(), |
84 { | 84 controller_impl->GetAnimation(0, Animation::Opacity)->start_time()); |
85 FakeLayerAnimationValueObserver dummyImpl; | 85 } |
86 scoped_refptr<LayerAnimationController> controllerImpl(LayerAnimationControl ler::create(0)); | 86 |
87 controllerImpl->addObserver(&dummyImpl); | 87 TEST(LayerAnimationControllerTest, SyncPauseAndResume) { |
88 FakeLayerAnimationValueObserver dummy; | 88 FakeLayerAnimationValueObserver dummy_impl; |
89 scoped_refptr<LayerAnimationController> controller(LayerAnimationController: :create(0)); | 89 scoped_refptr<LayerAnimationController> controller_impl( |
90 controller->addObserver(&dummy); | 90 LayerAnimationController::Create(0)); |
91 | 91 controller_impl->AddObserver(&dummy_impl); |
92 EXPECT_FALSE(controllerImpl->getAnimation(0, Animation::Opacity)); | 92 FakeLayerAnimationValueObserver dummy; |
93 | 93 scoped_refptr<LayerAnimationController> controller( |
94 addOpacityTransitionToController(*controller, 1, 0, 1, false); | 94 LayerAnimationController::Create(0)); |
95 | 95 controller->AddObserver(&dummy); |
96 controller->pushAnimationUpdatesTo(controllerImpl.get()); | 96 |
97 | 97 EXPECT_FALSE(controller_impl->GetAnimation(0, Animation::Opacity)); |
98 EXPECT_TRUE(controllerImpl->getAnimation(0, Animation::Opacity)); | 98 |
99 EXPECT_EQ(Animation::WaitingForTargetAvailability, controllerImpl->getAnimat ion(0, Animation::Opacity)->runState()); | 99 addOpacityTransitionToController(*controller, 1, 0, 1, false); |
100 | 100 |
101 // Start the animations on each controller. | 101 controller->PushAnimationUpdatesTo(controller_impl.get()); |
102 AnimationEventsVector events; | 102 |
103 controllerImpl->animate(0); | 103 EXPECT_TRUE(controller_impl->GetAnimation(0, Animation::Opacity)); |
104 controllerImpl->updateState(&events); | 104 EXPECT_EQ(Animation::WaitingForTargetAvailability, |
105 controller->animate(0); | 105 controller_impl->GetAnimation(0, Animation::Opacity)->run_state()); |
106 controller->updateState(0); | 106 |
107 EXPECT_EQ(Animation::Running, controllerImpl->getAnimation(0, Animation::Opa city)->runState()); | 107 // Start the animations on each controller. |
108 EXPECT_EQ(Animation::Running, controller->getAnimation(0, Animation::Opacity )->runState()); | 108 AnimationEventsVector events; |
109 | 109 controller_impl->Animate(0.0); |
110 // Pause the main-thread animation. | 110 controller_impl->UpdateState(&events); |
111 controller->suspendAnimations(1); | 111 controller->Animate(0.0); |
112 EXPECT_EQ(Animation::Paused, controller->getAnimation(0, Animation::Opacity) ->runState()); | 112 controller->UpdateState(NULL); |
113 | 113 EXPECT_EQ(Animation::Running, |
114 // The pause run state change should make it to the impl thread controller. | 114 controller_impl->GetAnimation(0, Animation::Opacity)->run_state()); |
115 controller->pushAnimationUpdatesTo(controllerImpl.get()); | 115 EXPECT_EQ(Animation::Running, |
116 EXPECT_EQ(Animation::Paused, controllerImpl->getAnimation(0, Animation::Opac ity)->runState()); | 116 controller->GetAnimation(0, Animation::Opacity)->run_state()); |
117 | 117 |
118 // Resume the main-thread animation. | 118 // Pause the main-thread animation. |
119 controller->resumeAnimations(2); | 119 controller->SuspendAnimations(1.0); |
120 EXPECT_EQ(Animation::Running, controller->getAnimation(0, Animation::Opacity )->runState()); | 120 EXPECT_EQ(Animation::Paused, |
121 | 121 controller->GetAnimation(0, Animation::Opacity)->run_state()); |
122 // The pause run state change should make it to the impl thread controller. | 122 |
123 controller->pushAnimationUpdatesTo(controllerImpl.get()); | 123 // The pause run state change should make it to the impl thread controller. |
124 EXPECT_EQ(Animation::Running, controllerImpl->getAnimation(0, Animation::Opa city)->runState()); | 124 controller->PushAnimationUpdatesTo(controller_impl.get()); |
125 } | 125 EXPECT_EQ(Animation::Paused, |
126 | 126 controller_impl->GetAnimation(0, Animation::Opacity)->run_state()); |
127 TEST(LayerAnimationControllerTest, doNotSyncFinishedAnimation) | 127 |
128 { | 128 // Resume the main-thread animation. |
129 FakeLayerAnimationValueObserver dummyImpl; | 129 controller->ResumeAnimations(2.0); |
130 scoped_refptr<LayerAnimationController> controllerImpl(LayerAnimationControl ler::create(0)); | 130 EXPECT_EQ(Animation::Running, |
131 controllerImpl->addObserver(&dummyImpl); | 131 controller->GetAnimation(0, Animation::Opacity)->run_state()); |
132 FakeLayerAnimationValueObserver dummy; | 132 |
133 scoped_refptr<LayerAnimationController> controller(LayerAnimationController: :create(0)); | 133 // The pause run state change should make it to the impl thread controller. |
134 controller->addObserver(&dummy); | 134 controller->PushAnimationUpdatesTo(controller_impl.get()); |
135 | 135 EXPECT_EQ(Animation::Running, |
136 EXPECT_FALSE(controllerImpl->getAnimation(0, Animation::Opacity)); | 136 controller_impl->GetAnimation(0, Animation::Opacity)->run_state()); |
137 | 137 } |
138 int animationId = addOpacityTransitionToController(*controller, 1, 0, 1, fal se); | 138 |
139 | 139 TEST(LayerAnimationControllerTest, DoNotSyncFinishedAnimation) { |
140 controller->pushAnimationUpdatesTo(controllerImpl.get()); | 140 FakeLayerAnimationValueObserver dummy_impl; |
141 | 141 scoped_refptr<LayerAnimationController> controller_impl( |
142 EXPECT_TRUE(controllerImpl->getAnimation(0, Animation::Opacity)); | 142 LayerAnimationController::Create(0)); |
143 EXPECT_EQ(Animation::WaitingForTargetAvailability, controllerImpl->getAnimat ion(0, Animation::Opacity)->runState()); | 143 controller_impl->AddObserver(&dummy_impl); |
144 | 144 FakeLayerAnimationValueObserver dummy; |
145 // Notify main thread controller that the animation has started. | 145 scoped_refptr<LayerAnimationController> controller( |
146 AnimationEvent animationStartedEvent(AnimationEvent::Started, 0, 0, Animatio n::Opacity, 0); | 146 LayerAnimationController::Create(0)); |
147 controller->OnAnimationStarted(animationStartedEvent); | 147 controller->AddObserver(&dummy); |
148 | 148 |
149 // Force animation to complete on impl thread. | 149 EXPECT_FALSE(controller_impl->GetAnimation(0, Animation::Opacity)); |
150 controllerImpl->removeAnimation(animationId); | 150 |
151 | 151 int animation_id = |
152 EXPECT_FALSE(controllerImpl->getAnimation(animationId, Animation::Opacity)); | 152 addOpacityTransitionToController(*controller, 1, 0, 1, false); |
153 | 153 |
154 controller->pushAnimationUpdatesTo(controllerImpl.get()); | 154 controller->PushAnimationUpdatesTo(controller_impl.get()); |
155 | 155 |
156 // Even though the main thread has a 'new' animation, it should not be pushe d because the animation has already completed on the impl thread. | 156 EXPECT_TRUE(controller_impl->GetAnimation(0, Animation::Opacity)); |
157 EXPECT_FALSE(controllerImpl->getAnimation(animationId, Animation::Opacity)); | 157 EXPECT_EQ(Animation::WaitingForTargetAvailability, |
158 controller_impl->GetAnimation(0, Animation::Opacity)->run_state()); | |
159 | |
160 // Notify main thread controller that the animation has started. | |
161 AnimationEvent animation_started_event( | |
162 AnimationEvent::Started, 0, 0, Animation::Opacity, 0); | |
163 controller->OnAnimationStarted(animation_started_event); | |
164 | |
165 // Force animation to complete on impl thread. | |
166 controller_impl->RemoveAnimation(animation_id); | |
167 | |
168 EXPECT_FALSE(controller_impl->GetAnimation(animation_id, Animation::Opacity)); | |
169 | |
170 controller->PushAnimationUpdatesTo(controller_impl.get()); | |
171 | |
172 // Even though the main thread has a 'new' animation, it should not be pushed | |
173 // because the animation has already completed on the impl thread. | |
174 EXPECT_FALSE(controller_impl->GetAnimation(animation_id, Animation::Opacity)); | |
158 } | 175 } |
159 | 176 |
160 // Tests that transitioning opacity from 0 to 1 works as expected. | 177 // Tests that transitioning opacity from 0 to 1 works as expected. |
161 | 178 |
162 static const AnimationEvent* getMostRecentPropertyUpdateEvent(const AnimationEve ntsVector* events) | 179 static const AnimationEvent* GetMostRecentPropertyUpdateEvent( |
163 { | 180 const AnimationEventsVector* events) { |
164 const AnimationEvent* event = 0; | 181 const AnimationEvent* event = 0; |
165 for (size_t i = 0; i < events->size(); ++i) | 182 for (size_t i = 0; i < events->size(); ++i) |
166 if ((*events)[i].type == AnimationEvent::PropertyUpdate) | 183 if ((*events)[i].type == AnimationEvent::PropertyUpdate) |
167 event = &(*events)[i]; | 184 event = &(*events)[i]; |
168 | 185 |
169 return event; | 186 return event; |
170 } | 187 } |
171 | 188 |
172 TEST(LayerAnimationControllerTest, TrivialTransition) | 189 TEST(LayerAnimationControllerTest, TrivialTransition) { |
173 { | 190 scoped_ptr<AnimationEventsVector> events( |
174 scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEvents Vector)); | 191 make_scoped_ptr(new AnimationEventsVector)); |
175 FakeLayerAnimationValueObserver dummy; | 192 FakeLayerAnimationValueObserver dummy; |
176 scoped_refptr<LayerAnimationController> controller(LayerAnimationController: :create(0)); | 193 scoped_refptr<LayerAnimationController> controller( |
177 controller->addObserver(&dummy); | 194 LayerAnimationController::Create(0)); |
178 | 195 controller->AddObserver(&dummy); |
179 scoped_ptr<Animation> toAdd(createAnimation(make_scoped_ptr(new FakeFloatTra nsition(1, 0, 1)).PassAs<AnimationCurve>(), 1, Animation::Opacity)); | 196 |
180 | 197 scoped_ptr<Animation> to_add(CreateAnimation( |
181 controller->addAnimation(toAdd.Pass()); | 198 make_scoped_ptr(new FakeFloatTransition(1.0, 0.f, 1.f)) |
182 controller->animate(0); | 199 .PassAs<AnimationCurve>(), |
183 controller->updateState(events.get()); | 200 1, |
184 EXPECT_TRUE(controller->hasActiveAnimation()); | 201 Animation::Opacity)); |
185 EXPECT_EQ(0, dummy.opacity()); | 202 |
186 // A non-implOnly animation should not generate property updates. | 203 controller->AddAnimation(to_add.Pass()); |
187 const AnimationEvent* event = getMostRecentPropertyUpdateEvent(events.get()) ; | 204 controller->Animate(0.0); |
188 EXPECT_FALSE(event); | 205 controller->UpdateState(events.get()); |
189 controller->animate(1); | 206 EXPECT_TRUE(controller->HasActiveAnimation()); |
190 controller->updateState(events.get()); | 207 EXPECT_EQ(0, dummy.opacity()); |
191 EXPECT_EQ(1, dummy.opacity()); | 208 // A non-implOnly animation should not generate property updates. |
192 EXPECT_FALSE(controller->hasActiveAnimation()); | 209 const AnimationEvent* event = GetMostRecentPropertyUpdateEvent(events.get()); |
193 event = getMostRecentPropertyUpdateEvent(events.get()); | 210 EXPECT_FALSE(event); |
194 EXPECT_FALSE(event); | 211 controller->Animate(1.0); |
195 } | 212 controller->UpdateState(events.get()); |
196 | 213 EXPECT_EQ(1, dummy.opacity()); |
197 TEST(LayerAnimationControllerTest, TrivialTransitionOnImpl) | 214 EXPECT_FALSE(controller->HasActiveAnimation()); |
198 { | 215 event = GetMostRecentPropertyUpdateEvent(events.get()); |
199 scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEvents Vector)); | 216 EXPECT_FALSE(event); |
200 FakeLayerAnimationValueObserver dummyImpl; | 217 } |
201 scoped_refptr<LayerAnimationController> controllerImpl(LayerAnimationControl ler::create(0)); | 218 |
202 controllerImpl->addObserver(&dummyImpl); | 219 TEST(LayerAnimationControllerTest, TrivialTransitionOnImpl) { |
203 | 220 scoped_ptr<AnimationEventsVector> events( |
204 scoped_ptr<Animation> toAdd(createAnimation(make_scoped_ptr(new FakeFloatTra nsition(1, 0, 1)).PassAs<AnimationCurve>(), 1, Animation::Opacity)); | 221 make_scoped_ptr(new AnimationEventsVector)); |
205 toAdd->setIsImplOnly(true); | 222 FakeLayerAnimationValueObserver dummy_impl; |
206 | 223 scoped_refptr<LayerAnimationController> controller_impl( |
207 controllerImpl->addAnimation(toAdd.Pass()); | 224 LayerAnimationController::Create(0)); |
208 controllerImpl->animate(0); | 225 controller_impl->AddObserver(&dummy_impl); |
209 controllerImpl->updateState(events.get()); | 226 |
210 EXPECT_TRUE(controllerImpl->hasActiveAnimation()); | 227 scoped_ptr<Animation> to_add(CreateAnimation( |
211 EXPECT_EQ(0, dummyImpl.opacity()); | 228 make_scoped_ptr(new FakeFloatTransition(1.0, 0.f, 1.f)) |
212 EXPECT_EQ(2, events->size()); | 229 .PassAs<AnimationCurve>(), |
213 const AnimationEvent* startOpacityEvent = getMostRecentPropertyUpdateEvent(e vents.get()); | 230 1, |
214 EXPECT_EQ(0, startOpacityEvent->opacity); | 231 Animation::Opacity)); |
215 | 232 to_add->set_is_impl_only(true); |
216 controllerImpl->animate(1); | 233 |
217 controllerImpl->updateState(events.get()); | 234 controller_impl->AddAnimation(to_add.Pass()); |
218 EXPECT_EQ(1, dummyImpl.opacity()); | 235 controller_impl->Animate(0.0); |
219 EXPECT_FALSE(controllerImpl->hasActiveAnimation()); | 236 controller_impl->UpdateState(events.get()); |
220 EXPECT_EQ(4, events->size()); | 237 EXPECT_TRUE(controller_impl->HasActiveAnimation()); |
221 const AnimationEvent* endOpacityEvent = getMostRecentPropertyUpdateEvent(eve nts.get()); | 238 EXPECT_EQ(0, dummy_impl.opacity()); |
222 EXPECT_EQ(1, endOpacityEvent->opacity); | 239 EXPECT_EQ(2, events->size()); |
223 } | 240 const AnimationEvent* start_opacity_event = |
224 | 241 GetMostRecentPropertyUpdateEvent(events.get()); |
225 TEST(LayerAnimationControllerTest, TrivialTransformOnImpl) | 242 EXPECT_EQ(0, start_opacity_event->opacity); |
226 { | 243 |
227 scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEvents Vector)); | 244 controller_impl->Animate(1.0); |
228 FakeLayerAnimationValueObserver dummyImpl; | 245 controller_impl->UpdateState(events.get()); |
229 scoped_refptr<LayerAnimationController> controllerImpl(LayerAnimationControl ler::create(0)); | 246 EXPECT_EQ(1, dummy_impl.opacity()); |
230 controllerImpl->addObserver(&dummyImpl); | 247 EXPECT_FALSE(controller_impl->HasActiveAnimation()); |
231 | 248 EXPECT_EQ(4, events->size()); |
232 // Choose different values for x and y to avoid coincidental values in the | 249 const AnimationEvent* end_opacity_event = |
233 // observed transforms. | 250 GetMostRecentPropertyUpdateEvent(events.get()); |
234 const float deltaX = 3; | 251 EXPECT_EQ(1, end_opacity_event->opacity); |
235 const float deltaY = 4; | 252 } |
236 | 253 |
237 scoped_ptr<KeyframedTransformAnimationCurve> curve(KeyframedTransformAnimati onCurve::create()); | 254 TEST(LayerAnimationControllerTest, TrivialTransformOnImpl) { |
238 | 255 scoped_ptr<AnimationEventsVector> events( |
239 // Create simple Transform animation. | 256 make_scoped_ptr(new AnimationEventsVector)); |
240 TransformOperations operations; | 257 FakeLayerAnimationValueObserver dummy_impl; |
241 curve->addKeyframe(TransformKeyframe::create(0, operations, scoped_ptr<cc::T imingFunction>())); | 258 scoped_refptr<LayerAnimationController> controller_impl( |
242 operations.AppendTranslate(deltaX, deltaY, 0); | 259 LayerAnimationController::Create(0)); |
243 curve->addKeyframe(TransformKeyframe::create(1, operations, scoped_ptr<cc::T imingFunction>())); | 260 controller_impl->AddObserver(&dummy_impl); |
244 | 261 |
245 scoped_ptr<Animation> animation(Animation::create(curve.PassAs<AnimationCurv e>(), 1, 0, Animation::Transform)); | 262 // Choose different values for x and y to avoid coincidental values in the |
246 animation->setIsImplOnly(true); | 263 // observed transforms. |
247 controllerImpl->addAnimation(animation.Pass()); | 264 const float delta_x = 3; |
248 | 265 const float delta_y = 4; |
249 // Run animation. | 266 |
250 controllerImpl->animate(0); | 267 scoped_ptr<KeyframedTransformAnimationCurve> curve( |
251 controllerImpl->updateState(events.get()); | 268 KeyframedTransformAnimationCurve::Create()); |
252 EXPECT_TRUE(controllerImpl->hasActiveAnimation()); | 269 |
253 EXPECT_EQ(gfx::Transform(), dummyImpl.transform()); | 270 // Create simple Transform animation. |
254 EXPECT_EQ(2, events->size()); | 271 TransformOperations operations; |
255 const AnimationEvent* startTransformEvent = getMostRecentPropertyUpdateEvent (events.get()); | 272 curve->AddKeyframe(TransformKeyframe::Create( |
256 ASSERT_TRUE(startTransformEvent); | 273 0, operations, scoped_ptr<cc::TimingFunction>())); |
257 EXPECT_EQ(gfx::Transform(), startTransformEvent->transform); | 274 operations.AppendTranslate(delta_x, delta_y, 0); |
258 | 275 curve->AddKeyframe(TransformKeyframe::Create( |
259 gfx::Transform expectedTransform; | 276 1, operations, scoped_ptr<cc::TimingFunction>())); |
260 expectedTransform.Translate(deltaX, deltaY); | 277 |
261 | 278 scoped_ptr<Animation> animation(Animation::Create( |
262 controllerImpl->animate(1); | 279 curve.PassAs<AnimationCurve>(), 1, 0, Animation::Transform)); |
263 controllerImpl->updateState(events.get()); | 280 animation->set_is_impl_only(true); |
264 EXPECT_EQ(expectedTransform, dummyImpl.transform()); | 281 controller_impl->AddAnimation(animation.Pass()); |
265 EXPECT_FALSE(controllerImpl->hasActiveAnimation()); | 282 |
266 EXPECT_EQ(4, events->size()); | 283 // Run animation. |
267 const AnimationEvent* endTransformEvent = getMostRecentPropertyUpdateEvent(e vents.get()); | 284 controller_impl->Animate(0.0); |
268 EXPECT_EQ(expectedTransform, endTransformEvent->transform); | 285 controller_impl->UpdateState(events.get()); |
269 } | 286 EXPECT_TRUE(controller_impl->HasActiveAnimation()); |
270 | 287 EXPECT_EQ(gfx::Transform(), dummy_impl.transform()); |
271 // Tests animations that are waiting for a synchronized start time do not finish . | 288 EXPECT_EQ(2, events->size()); |
272 TEST(LayerAnimationControllerTest, AnimationsWaitingForStartTimeDoNotFinishIfThe yWaitLongerToStartThanTheirDuration) | 289 const AnimationEvent* start_transform_event = |
273 { | 290 GetMostRecentPropertyUpdateEvent(events.get()); |
274 scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEvents Vector)); | 291 ASSERT_TRUE(start_transform_event); |
275 FakeLayerAnimationValueObserver dummy; | 292 EXPECT_EQ(gfx::Transform(), start_transform_event->transform); |
276 scoped_refptr<LayerAnimationController> controller(LayerAnimationController: :create(0)); | 293 |
277 controller->addObserver(&dummy); | 294 gfx::Transform expected_transform; |
278 | 295 expected_transform.Translate(delta_x, delta_y); |
279 scoped_ptr<Animation> toAdd(createAnimation(make_scoped_ptr(new FakeFloatTra nsition(1, 0, 1)).PassAs<AnimationCurve>(), 1, Animation::Opacity)); | 296 |
280 toAdd->setNeedsSynchronizedStartTime(true); | 297 controller_impl->Animate(1.0); |
281 | 298 controller_impl->UpdateState(events.get()); |
282 // We should pause at the first keyframe indefinitely waiting for that anima tion to start. | 299 EXPECT_EQ(expected_transform, dummy_impl.transform()); |
283 controller->addAnimation(toAdd.Pass()); | 300 EXPECT_FALSE(controller_impl->HasActiveAnimation()); |
284 controller->animate(0); | 301 EXPECT_EQ(4, events->size()); |
285 controller->updateState(events.get()); | 302 const AnimationEvent* end_transform_event = |
286 EXPECT_TRUE(controller->hasActiveAnimation()); | 303 GetMostRecentPropertyUpdateEvent(events.get()); |
287 EXPECT_EQ(0, dummy.opacity()); | 304 EXPECT_EQ(expected_transform, end_transform_event->transform); |
288 controller->animate(1); | 305 } |
289 controller->updateState(events.get()); | 306 |
290 EXPECT_TRUE(controller->hasActiveAnimation()); | 307 // Tests animations that are waiting for a synchronized start time do not |
291 EXPECT_EQ(0, dummy.opacity()); | 308 // finish. |
292 controller->animate(2); | 309 TEST(LayerAnimationControllerTest, |
293 controller->updateState(events.get()); | 310 AnimationsWaitingForStartTimeDoNotFinishIfTheyWaitLongerToStartThanTheirDur ation) { |
294 EXPECT_TRUE(controller->hasActiveAnimation()); | 311 scoped_ptr<AnimationEventsVector> events( |
295 EXPECT_EQ(0, dummy.opacity()); | 312 make_scoped_ptr(new AnimationEventsVector)); |
296 | 313 FakeLayerAnimationValueObserver dummy; |
297 // Send the synchronized start time. | 314 scoped_refptr<LayerAnimationController> controller( |
298 controller->OnAnimationStarted(AnimationEvent(AnimationEvent::Started, 0, 1, Animation::Opacity, 2)); | 315 LayerAnimationController::Create(0)); |
299 controller->animate(5); | 316 controller->AddObserver(&dummy); |
300 controller->updateState(events.get()); | 317 |
301 EXPECT_EQ(1, dummy.opacity()); | 318 scoped_ptr<Animation> to_add(CreateAnimation( |
302 EXPECT_FALSE(controller->hasActiveAnimation()); | 319 make_scoped_ptr(new FakeFloatTransition(1.0, 0.f, 1.f)) |
320 .PassAs<AnimationCurve>(), | |
jamesr
2013/03/09 02:44:56
this looks weird. the .PassAss<>() is line up as i
| |
321 1, | |
322 Animation::Opacity)); | |
323 to_add->set_needs_synchronized_start_time(true); | |
324 | |
325 // We should pause at the first keyframe indefinitely waiting for that | |
326 // animation to start. | |
327 controller->AddAnimation(to_add.Pass()); | |
328 controller->Animate(0.0); | |
329 controller->UpdateState(events.get()); | |
330 EXPECT_TRUE(controller->HasActiveAnimation()); | |
331 EXPECT_EQ(0, dummy.opacity()); | |
332 controller->Animate(1.0); | |
333 controller->UpdateState(events.get()); | |
334 EXPECT_TRUE(controller->HasActiveAnimation()); | |
335 EXPECT_EQ(0, dummy.opacity()); | |
336 controller->Animate(2.0); | |
337 controller->UpdateState(events.get()); | |
338 EXPECT_TRUE(controller->HasActiveAnimation()); | |
339 EXPECT_EQ(0, dummy.opacity()); | |
340 | |
341 // Send the synchronized start time. | |
342 controller->OnAnimationStarted(AnimationEvent( | |
343 AnimationEvent::Started, 0, 1, Animation::Opacity, 2)); | |
344 controller->Animate(5.0); | |
345 controller->UpdateState(events.get()); | |
346 EXPECT_EQ(1, dummy.opacity()); | |
347 EXPECT_FALSE(controller->HasActiveAnimation()); | |
303 } | 348 } |
304 | 349 |
305 // Tests that two queued animations affecting the same property run in sequence. | 350 // Tests that two queued animations affecting the same property run in sequence. |
306 TEST(LayerAnimationControllerTest, TrivialQueuing) | 351 TEST(LayerAnimationControllerTest, TrivialQueuing) { |
307 { | 352 scoped_ptr<AnimationEventsVector> events( |
308 scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEvents Vector)); | 353 make_scoped_ptr(new AnimationEventsVector)); |
309 FakeLayerAnimationValueObserver dummy; | 354 FakeLayerAnimationValueObserver dummy; |
310 scoped_refptr<LayerAnimationController> controller(LayerAnimationController: :create(0)); | 355 scoped_refptr<LayerAnimationController> controller( |
311 controller->addObserver(&dummy); | 356 LayerAnimationController::Create(0)); |
312 | 357 controller->AddObserver(&dummy); |
313 controller->addAnimation(createAnimation(make_scoped_ptr(new FakeFloatTransi tion(1, 0, 1)).PassAs<AnimationCurve>(), 1, Animation::Opacity)); | 358 |
314 controller->addAnimation(createAnimation(make_scoped_ptr(new FakeFloatTransi tion(1, 1, 0.5)).PassAs<AnimationCurve>(), 2, Animation::Opacity)); | 359 controller->AddAnimation(CreateAnimation( |
315 | 360 make_scoped_ptr(new FakeFloatTransition(1.0, 0.f, 1.f)) |
316 controller->animate(0); | 361 .PassAs<AnimationCurve>(), |
jamesr
2013/03/09 02:44:56
and here
| |
317 controller->updateState(events.get()); | 362 1, |
318 EXPECT_TRUE(controller->hasActiveAnimation()); | 363 Animation::Opacity)); |
319 EXPECT_EQ(0, dummy.opacity()); | 364 controller->AddAnimation(CreateAnimation( |
320 controller->animate(1); | 365 make_scoped_ptr(new FakeFloatTransition(1.0, 1.f, 0.5f)) |
321 controller->updateState(events.get()); | 366 .PassAs<AnimationCurve>(), |
jamesr
2013/03/09 02:44:56
and here
| |
322 EXPECT_TRUE(controller->hasActiveAnimation()); | 367 2, |
323 EXPECT_EQ(1, dummy.opacity()); | 368 Animation::Opacity)); |
324 controller->animate(2); | 369 |
325 controller->updateState(events.get()); | 370 controller->Animate(0.0); |
326 EXPECT_EQ(0.5, dummy.opacity()); | 371 controller->UpdateState(events.get()); |
327 EXPECT_FALSE(controller->hasActiveAnimation()); | 372 EXPECT_TRUE(controller->HasActiveAnimation()); |
373 EXPECT_EQ(0, dummy.opacity()); | |
374 controller->Animate(1.0); | |
375 controller->UpdateState(events.get()); | |
376 EXPECT_TRUE(controller->HasActiveAnimation()); | |
377 EXPECT_EQ(1, dummy.opacity()); | |
378 controller->Animate(2.0); | |
379 controller->UpdateState(events.get()); | |
380 EXPECT_EQ(0.5, dummy.opacity()); | |
381 EXPECT_FALSE(controller->HasActiveAnimation()); | |
328 } | 382 } |
329 | 383 |
330 // Tests interrupting a transition with another transition. | 384 // Tests interrupting a transition with another transition. |
331 TEST(LayerAnimationControllerTest, Interrupt) | 385 TEST(LayerAnimationControllerTest, Interrupt) { |
332 { | 386 scoped_ptr<AnimationEventsVector> events( |
333 scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEvents Vector)); | 387 make_scoped_ptr(new AnimationEventsVector)); |
334 FakeLayerAnimationValueObserver dummy; | 388 FakeLayerAnimationValueObserver dummy; |
335 scoped_refptr<LayerAnimationController> controller(LayerAnimationController: :create(0)); | 389 scoped_refptr<LayerAnimationController> controller( |
336 controller->addObserver(&dummy); | 390 LayerAnimationController::Create(0)); |
337 controller->addAnimation(createAnimation(make_scoped_ptr(new FakeFloatTransi tion(1, 0, 1)).PassAs<AnimationCurve>(), 1, Animation::Opacity)); | 391 controller->AddObserver(&dummy); |
338 controller->animate(0); | 392 controller->AddAnimation(CreateAnimation( |
339 controller->updateState(events.get()); | 393 make_scoped_ptr(new FakeFloatTransition(1.0, 0.f, 1.f)) |
340 EXPECT_TRUE(controller->hasActiveAnimation()); | 394 .PassAs<AnimationCurve>(), |
jamesr
2013/03/09 02:44:56
and here
| |
341 EXPECT_EQ(0, dummy.opacity()); | 395 1, |
342 | 396 Animation::Opacity)); |
343 scoped_ptr<Animation> toAdd(createAnimation(make_scoped_ptr(new FakeFloatTra nsition(1, 1, 0.5)).PassAs<AnimationCurve>(), 2, Animation::Opacity)); | 397 controller->Animate(0.0); |
344 toAdd->setRunState(Animation::WaitingForNextTick, 0); | 398 controller->UpdateState(events.get()); |
345 controller->addAnimation(toAdd.Pass()); | 399 EXPECT_TRUE(controller->HasActiveAnimation()); |
346 | 400 EXPECT_EQ(0, dummy.opacity()); |
347 // Since the animation was in the WaitingForNextTick state, it should start right in | 401 |
348 // this call to animate. | 402 scoped_ptr<Animation> to_add(CreateAnimation( |
349 controller->animate(0.5); | 403 make_scoped_ptr(new FakeFloatTransition(1.0, 1.f, 0.5f)) |
350 controller->updateState(events.get()); | 404 .PassAs<AnimationCurve>(), |
jamesr
2013/03/09 02:44:56
yeah, lots of these
| |
351 EXPECT_TRUE(controller->hasActiveAnimation()); | 405 2, |
352 EXPECT_EQ(1, dummy.opacity()); | 406 Animation::Opacity)); |
353 controller->animate(1.5); | 407 to_add->SetRunState(Animation::WaitingForNextTick, 0); |
354 controller->updateState(events.get()); | 408 controller->AddAnimation(to_add.Pass()); |
355 EXPECT_EQ(0.5, dummy.opacity()); | 409 |
356 EXPECT_FALSE(controller->hasActiveAnimation()); | 410 // Since the animation was in the WaitingForNextTick state, it should start |
357 } | 411 // right in this call to animate. |
358 | 412 controller->Animate(0.5); |
359 // Tests scheduling two animations to run together when only one property is fre e. | 413 controller->UpdateState(events.get()); |
360 TEST(LayerAnimationControllerTest, ScheduleTogetherWhenAPropertyIsBlocked) | 414 EXPECT_TRUE(controller->HasActiveAnimation()); |
361 { | 415 EXPECT_EQ(1, dummy.opacity()); |
362 scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEvents Vector)); | 416 controller->Animate(1.5); |
363 FakeLayerAnimationValueObserver dummy; | 417 controller->UpdateState(events.get()); |
364 scoped_refptr<LayerAnimationController> controller(LayerAnimationController: :create(0)); | 418 EXPECT_EQ(0.5, dummy.opacity()); |
365 controller->addObserver(&dummy); | 419 EXPECT_FALSE(controller->HasActiveAnimation()); |
366 | 420 } |
367 controller->addAnimation(createAnimation(make_scoped_ptr(new FakeTransformTr ansition(1)).PassAs<AnimationCurve>(), 1, Animation::Transform)); | 421 |
368 controller->addAnimation(createAnimation(make_scoped_ptr(new FakeTransformTr ansition(1)).PassAs<AnimationCurve>(), 2, Animation::Transform)); | 422 // Tests scheduling two animations to run together when only one property is |
369 controller->addAnimation(createAnimation(make_scoped_ptr(new FakeFloatTransi tion(1, 0, 1)).PassAs<AnimationCurve>(), 2, Animation::Opacity)); | 423 // free. |
370 | 424 TEST(LayerAnimationControllerTest, ScheduleTogetherWhenAPropertyIsBlocked) { |
371 controller->animate(0); | 425 scoped_ptr<AnimationEventsVector> events( |
372 controller->updateState(events.get()); | 426 make_scoped_ptr(new AnimationEventsVector)); |
373 EXPECT_EQ(0, dummy.opacity()); | 427 FakeLayerAnimationValueObserver dummy; |
374 EXPECT_TRUE(controller->hasActiveAnimation()); | 428 scoped_refptr<LayerAnimationController> controller( |
375 controller->animate(1); | 429 LayerAnimationController::Create(0)); |
376 controller->updateState(events.get()); | 430 controller->AddObserver(&dummy); |
377 // Should not have started the float transition yet. | 431 |
378 EXPECT_TRUE(controller->hasActiveAnimation()); | 432 controller->AddAnimation(CreateAnimation( |
379 EXPECT_EQ(0, dummy.opacity()); | 433 make_scoped_ptr(new FakeTransformTransition(1)).PassAs<AnimationCurve>(), |
380 // The float animation should have started at time 1 and should be done. | 434 1, |
381 controller->animate(2); | 435 Animation::Transform)); |
382 controller->updateState(events.get()); | 436 controller->AddAnimation(CreateAnimation( |
383 EXPECT_EQ(1, dummy.opacity()); | 437 make_scoped_ptr(new FakeTransformTransition(1)).PassAs<AnimationCurve>(), |
384 EXPECT_FALSE(controller->hasActiveAnimation()); | 438 2, |
385 } | 439 Animation::Transform)); |
386 | 440 controller->AddAnimation(CreateAnimation( |
387 // Tests scheduling two animations to run together with different lengths and an other | 441 make_scoped_ptr(new FakeFloatTransition(1.0, 0.f, 1.f)) |
388 // animation queued to start when the shorter animation finishes (should wait | 442 .PassAs<AnimationCurve>(), |
389 // for both to finish). | 443 2, |
390 TEST(LayerAnimationControllerTest, ScheduleTogetherWithAnAnimWaiting) | 444 Animation::Opacity)); |
391 { | 445 |
392 scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEvents Vector)); | 446 controller->Animate(0.0); |
393 FakeLayerAnimationValueObserver dummy; | 447 controller->UpdateState(events.get()); |
394 scoped_refptr<LayerAnimationController> controller(LayerAnimationController: :create(0)); | 448 EXPECT_EQ(0, dummy.opacity()); |
395 controller->addObserver(&dummy); | 449 EXPECT_TRUE(controller->HasActiveAnimation()); |
396 | 450 controller->Animate(1.0); |
397 controller->addAnimation(createAnimation(make_scoped_ptr(new FakeTransformTr ansition(2)).PassAs<AnimationCurve>(), 1, Animation::Transform)); | 451 controller->UpdateState(events.get()); |
398 controller->addAnimation(createAnimation(make_scoped_ptr(new FakeFloatTransi tion(1, 0, 1)).PassAs<AnimationCurve>(), 1, Animation::Opacity)); | 452 // Should not have started the float transition yet. |
399 controller->addAnimation(createAnimation(make_scoped_ptr(new FakeFloatTransi tion(1, 1, 0.5)).PassAs<AnimationCurve>(), 2, Animation::Opacity)); | 453 EXPECT_TRUE(controller->HasActiveAnimation()); |
400 | 454 EXPECT_EQ(0, dummy.opacity()); |
401 // Animations with id 1 should both start now. | 455 // The float animation should have started at time 1 and should be done. |
402 controller->animate(0); | 456 controller->Animate(2.0); |
403 controller->updateState(events.get()); | 457 controller->UpdateState(events.get()); |
404 EXPECT_TRUE(controller->hasActiveAnimation()); | 458 EXPECT_EQ(1, dummy.opacity()); |
405 EXPECT_EQ(0, dummy.opacity()); | 459 EXPECT_FALSE(controller->HasActiveAnimation()); |
406 // The opacity animation should have finished at time 1, but the group | 460 } |
407 // of animations with id 1 don't finish until time 2 because of the length | 461 |
408 // of the transform animation. | 462 // Tests scheduling two animations to run together with different lengths and |
409 controller->animate(2); | 463 // another animation queued to start when the shorter animation finishes (should |
410 controller->updateState(events.get()); | 464 // wait for both to finish). |
411 // Should not have started the float transition yet. | 465 TEST(LayerAnimationControllerTest, ScheduleTogetherWithAnAnimWaiting) { |
412 EXPECT_TRUE(controller->hasActiveAnimation()); | 466 scoped_ptr<AnimationEventsVector> events( |
413 EXPECT_EQ(1, dummy.opacity()); | 467 make_scoped_ptr(new AnimationEventsVector)); |
414 | 468 FakeLayerAnimationValueObserver dummy; |
415 // The second opacity animation should start at time 2 and should be done by time 3 | 469 scoped_refptr<LayerAnimationController> controller( |
416 controller->animate(3); | 470 LayerAnimationController::Create(0)); |
417 controller->updateState(events.get()); | 471 controller->AddObserver(&dummy); |
418 EXPECT_EQ(0.5, dummy.opacity()); | 472 |
419 EXPECT_FALSE(controller->hasActiveAnimation()); | 473 controller->AddAnimation(CreateAnimation( |
474 make_scoped_ptr(new FakeTransformTransition(2)).PassAs<AnimationCurve>(), | |
475 1, | |
476 Animation::Transform)); | |
477 controller->AddAnimation(CreateAnimation( | |
478 make_scoped_ptr(new FakeFloatTransition(1.0, 0.f, 1.f)) | |
479 .PassAs<AnimationCurve>(), | |
480 1, | |
481 Animation::Opacity)); | |
482 controller->AddAnimation(CreateAnimation( | |
483 make_scoped_ptr(new FakeFloatTransition(1.0, 1.f, 0.5f)) | |
484 .PassAs<AnimationCurve>(), | |
485 2, | |
486 Animation::Opacity)); | |
487 | |
488 // Animations with id 1 should both start now. | |
489 controller->Animate(0.0); | |
490 controller->UpdateState(events.get()); | |
491 EXPECT_TRUE(controller->HasActiveAnimation()); | |
492 EXPECT_EQ(0, dummy.opacity()); | |
493 // The opacity animation should have finished at time 1, but the group | |
494 // of animations with id 1 don't finish until time 2 because of the length | |
495 // of the transform animation. | |
496 controller->Animate(2.0); | |
497 controller->UpdateState(events.get()); | |
498 // Should not have started the float transition yet. | |
499 EXPECT_TRUE(controller->HasActiveAnimation()); | |
500 EXPECT_EQ(1, dummy.opacity()); | |
501 | |
502 // The second opacity animation should start at time 2 and should be done by | |
503 // time 3. | |
504 controller->Animate(3.0); | |
505 controller->UpdateState(events.get()); | |
506 EXPECT_EQ(0.5, dummy.opacity()); | |
507 EXPECT_FALSE(controller->HasActiveAnimation()); | |
420 } | 508 } |
421 | 509 |
422 // Tests scheduling an animation to start in the future. | 510 // Tests scheduling an animation to start in the future. |
423 TEST(LayerAnimationControllerTest, ScheduleAnimation) | 511 TEST(LayerAnimationControllerTest, ScheduleAnimation) { |
424 { | 512 scoped_ptr<AnimationEventsVector> events( |
425 scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEvents Vector)); | 513 make_scoped_ptr(new AnimationEventsVector)); |
426 FakeLayerAnimationValueObserver dummy; | 514 FakeLayerAnimationValueObserver dummy; |
427 scoped_refptr<LayerAnimationController> controller(LayerAnimationController: :create(0)); | 515 scoped_refptr<LayerAnimationController> controller( |
428 controller->addObserver(&dummy); | 516 LayerAnimationController::Create(0)); |
429 | 517 controller->AddObserver(&dummy); |
430 scoped_ptr<Animation> toAdd(createAnimation(make_scoped_ptr(new FakeFloatTra nsition(1, 0, 1)).PassAs<AnimationCurve>(), 1, Animation::Opacity)); | 518 |
431 toAdd->setRunState(Animation::WaitingForStartTime, 0); | 519 scoped_ptr<Animation> to_add(CreateAnimation( |
432 toAdd->setStartTime(1); | 520 make_scoped_ptr(new FakeFloatTransition(1.0, 0.f, 1.f)) |
433 controller->addAnimation(toAdd.Pass()); | 521 .PassAs<AnimationCurve>(), |
434 | 522 1, |
435 controller->animate(0); | 523 Animation::Opacity)); |
436 controller->updateState(events.get()); | 524 to_add->SetRunState(Animation::WaitingForStartTime, 0); |
437 EXPECT_TRUE(controller->hasActiveAnimation()); | 525 to_add->set_start_time(1.f); |
438 EXPECT_EQ(0, dummy.opacity()); | 526 controller->AddAnimation(to_add.Pass()); |
439 controller->animate(1); | 527 |
440 controller->updateState(events.get()); | 528 controller->Animate(0.0); |
441 EXPECT_TRUE(controller->hasActiveAnimation()); | 529 controller->UpdateState(events.get()); |
442 EXPECT_EQ(0, dummy.opacity()); | 530 EXPECT_TRUE(controller->HasActiveAnimation()); |
443 controller->animate(2); | 531 EXPECT_EQ(0, dummy.opacity()); |
444 controller->updateState(events.get()); | 532 controller->Animate(1.0); |
445 EXPECT_EQ(1, dummy.opacity()); | 533 controller->UpdateState(events.get()); |
446 EXPECT_FALSE(controller->hasActiveAnimation()); | 534 EXPECT_TRUE(controller->HasActiveAnimation()); |
447 } | 535 EXPECT_EQ(0, dummy.opacity()); |
448 | 536 controller->Animate(2.0); |
449 // Tests scheduling an animation to start in the future that's interrupting a ru nning animation. | 537 controller->UpdateState(events.get()); |
450 TEST(LayerAnimationControllerTest, ScheduledAnimationInterruptsRunningAnimation) | 538 EXPECT_EQ(1, dummy.opacity()); |
451 { | 539 EXPECT_FALSE(controller->HasActiveAnimation()); |
452 scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEvents Vector)); | 540 } |
453 FakeLayerAnimationValueObserver dummy; | 541 |
454 scoped_refptr<LayerAnimationController> controller(LayerAnimationController: :create(0)); | 542 // Tests scheduling an animation to start in the future that's interrupting a |
455 controller->addObserver(&dummy); | 543 // running animation. |
456 | 544 TEST(LayerAnimationControllerTest, |
457 controller->addAnimation(createAnimation(make_scoped_ptr(new FakeFloatTransi tion(2, 0, 1)).PassAs<AnimationCurve>(), 1, Animation::Opacity)); | 545 ScheduledAnimationInterruptsRunningAnimation) { |
458 | 546 scoped_ptr<AnimationEventsVector> events( |
459 scoped_ptr<Animation> toAdd(createAnimation(make_scoped_ptr(new FakeFloatTra nsition(1, 0.5, 0)).PassAs<AnimationCurve>(), 2, Animation::Opacity)); | 547 make_scoped_ptr(new AnimationEventsVector)); |
460 toAdd->setRunState(Animation::WaitingForStartTime, 0); | 548 FakeLayerAnimationValueObserver dummy; |
461 toAdd->setStartTime(1); | 549 scoped_refptr<LayerAnimationController> controller( |
462 controller->addAnimation(toAdd.Pass()); | 550 LayerAnimationController::Create(0)); |
463 | 551 controller->AddObserver(&dummy); |
464 // First 2s opacity transition should start immediately. | 552 |
465 controller->animate(0); | 553 controller->AddAnimation(CreateAnimation( |
466 controller->updateState(events.get()); | 554 make_scoped_ptr(new FakeFloatTransition(2.0, 0.f, 1.f)) |
467 EXPECT_TRUE(controller->hasActiveAnimation()); | 555 .PassAs<AnimationCurve>(), 1, Animation::Opacity)); |
468 EXPECT_EQ(0, dummy.opacity()); | 556 |
469 controller->animate(0.5); | 557 scoped_ptr<Animation> to_add(CreateAnimation( |
470 controller->updateState(events.get()); | 558 make_scoped_ptr(new FakeFloatTransition(1.0, 0.5f, 0.f)) |
471 EXPECT_TRUE(controller->hasActiveAnimation()); | 559 .PassAs<AnimationCurve>(), |
472 EXPECT_EQ(0.25, dummy.opacity()); | 560 2, |
473 controller->animate(1); | 561 Animation::Opacity)); |
474 controller->updateState(events.get()); | 562 to_add->SetRunState(Animation::WaitingForStartTime, 0); |
475 EXPECT_TRUE(controller->hasActiveAnimation()); | 563 to_add->set_start_time(1.f); |
476 EXPECT_EQ(0.5, dummy.opacity()); | 564 controller->AddAnimation(to_add.Pass()); |
477 controller->animate(2); | 565 |
478 controller->updateState(events.get()); | 566 // First 2s opacity transition should start immediately. |
479 EXPECT_EQ(0, dummy.opacity()); | 567 controller->Animate(0.0); |
480 EXPECT_FALSE(controller->hasActiveAnimation()); | 568 controller->UpdateState(events.get()); |
481 } | 569 EXPECT_TRUE(controller->HasActiveAnimation()); |
482 | 570 EXPECT_EQ(0, dummy.opacity()); |
483 // Tests scheduling an animation to start in the future that interrupts a runnin g animation | 571 controller->Animate(0.5); |
484 // and there is yet another animation queued to start later. | 572 controller->UpdateState(events.get()); |
485 TEST(LayerAnimationControllerTest, ScheduledAnimationInterruptsRunningAnimationW ithAnimInQueue) | 573 EXPECT_TRUE(controller->HasActiveAnimation()); |
486 { | 574 EXPECT_EQ(0.25, dummy.opacity()); |
487 scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEvents Vector)); | 575 controller->Animate(1.0); |
488 FakeLayerAnimationValueObserver dummy; | 576 controller->UpdateState(events.get()); |
489 scoped_refptr<LayerAnimationController> controller(LayerAnimationController: :create(0)); | 577 EXPECT_TRUE(controller->HasActiveAnimation()); |
490 controller->addObserver(&dummy); | 578 EXPECT_EQ(0.5, dummy.opacity()); |
491 | 579 controller->Animate(2.0); |
492 controller->addAnimation(createAnimation(make_scoped_ptr(new FakeFloatTransi tion(2, 0, 1)).PassAs<AnimationCurve>(), 1, Animation::Opacity)); | 580 controller->UpdateState(events.get()); |
493 | 581 EXPECT_EQ(0, dummy.opacity()); |
494 scoped_ptr<Animation> toAdd(createAnimation(make_scoped_ptr(new FakeFloatTra nsition(2, 0.5, 0)).PassAs<AnimationCurve>(), 2, Animation::Opacity)); | 582 EXPECT_FALSE(controller->HasActiveAnimation()); |
495 toAdd->setRunState(Animation::WaitingForStartTime, 0); | 583 } |
496 toAdd->setStartTime(1); | 584 |
497 controller->addAnimation(toAdd.Pass()); | 585 // Tests scheduling an animation to start in the future that interrupts a |
498 | 586 // running animation and there is yet another animation queued to start later. |
499 controller->addAnimation(createAnimation(make_scoped_ptr(new FakeFloatTransi tion(1, 0, 0.75)).PassAs<AnimationCurve>(), 3, Animation::Opacity)); | 587 TEST(LayerAnimationControllerTest, |
500 | 588 ScheduledAnimationInterruptsRunningAnimationWithAnimInQueue) { |
501 // First 2s opacity transition should start immediately. | 589 scoped_ptr<AnimationEventsVector> events( |
502 controller->animate(0); | 590 make_scoped_ptr(new AnimationEventsVector)); |
503 controller->updateState(events.get()); | 591 FakeLayerAnimationValueObserver dummy; |
504 EXPECT_TRUE(controller->hasActiveAnimation()); | 592 scoped_refptr<LayerAnimationController> controller( |
505 EXPECT_EQ(0, dummy.opacity()); | 593 LayerAnimationController::Create(0)); |
506 controller->animate(0.5); | 594 controller->AddObserver(&dummy); |
507 controller->updateState(events.get()); | 595 |
508 EXPECT_TRUE(controller->hasActiveAnimation()); | 596 controller->AddAnimation(CreateAnimation( |
509 EXPECT_EQ(0.25, dummy.opacity()); | 597 make_scoped_ptr(new FakeFloatTransition(2.0, 0.f, 1.f)) |
510 EXPECT_TRUE(controller->hasActiveAnimation()); | 598 .PassAs<AnimationCurve>(), |
511 controller->animate(1); | 599 1, |
512 controller->updateState(events.get()); | 600 Animation::Opacity)); |
513 EXPECT_TRUE(controller->hasActiveAnimation()); | 601 |
514 EXPECT_EQ(0.5, dummy.opacity()); | 602 scoped_ptr<Animation> to_add(CreateAnimation( |
515 controller->animate(3); | 603 make_scoped_ptr(new FakeFloatTransition(2.0, 0.5f, 0.f)) |
516 controller->updateState(events.get()); | 604 .PassAs<AnimationCurve>(), |
517 EXPECT_TRUE(controller->hasActiveAnimation()); | 605 2, |
518 EXPECT_EQ(0, dummy.opacity()); | 606 Animation::Opacity)); |
519 controller->animate(4); | 607 to_add->SetRunState(Animation::WaitingForStartTime, 0); |
520 controller->updateState(events.get()); | 608 to_add->set_start_time(1.f); |
521 EXPECT_EQ(0.75, dummy.opacity()); | 609 controller->AddAnimation(to_add.Pass()); |
522 EXPECT_FALSE(controller->hasActiveAnimation()); | 610 |
611 controller->AddAnimation(CreateAnimation( | |
612 make_scoped_ptr(new FakeFloatTransition(1.0, 0.f, 0.75f)) | |
613 .PassAs<AnimationCurve>(), | |
614 3, | |
615 Animation::Opacity)); | |
616 | |
617 // First 2s opacity transition should start immediately. | |
618 controller->Animate(0.0); | |
619 controller->UpdateState(events.get()); | |
620 EXPECT_TRUE(controller->HasActiveAnimation()); | |
621 EXPECT_EQ(0, dummy.opacity()); | |
622 controller->Animate(0.5); | |
623 controller->UpdateState(events.get()); | |
624 EXPECT_TRUE(controller->HasActiveAnimation()); | |
625 EXPECT_EQ(0.25, dummy.opacity()); | |
626 EXPECT_TRUE(controller->HasActiveAnimation()); | |
627 controller->Animate(1.0); | |
628 controller->UpdateState(events.get()); | |
629 EXPECT_TRUE(controller->HasActiveAnimation()); | |
630 EXPECT_EQ(0.5, dummy.opacity()); | |
631 controller->Animate(3.0); | |
632 controller->UpdateState(events.get()); | |
633 EXPECT_TRUE(controller->HasActiveAnimation()); | |
634 EXPECT_EQ(0, dummy.opacity()); | |
635 controller->Animate(4.0); | |
636 controller->UpdateState(events.get()); | |
637 EXPECT_EQ(0.75, dummy.opacity()); | |
638 EXPECT_FALSE(controller->HasActiveAnimation()); | |
523 } | 639 } |
524 | 640 |
525 // Test that a looping animation loops and for the correct number of iterations. | 641 // Test that a looping animation loops and for the correct number of iterations. |
526 TEST(LayerAnimationControllerTest, TrivialLooping) | 642 TEST(LayerAnimationControllerTest, TrivialLooping) { |
527 { | 643 scoped_ptr<AnimationEventsVector> events( |
528 scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEvents Vector)); | 644 make_scoped_ptr(new AnimationEventsVector)); |
529 FakeLayerAnimationValueObserver dummy; | 645 FakeLayerAnimationValueObserver dummy; |
530 scoped_refptr<LayerAnimationController> controller(LayerAnimationController: :create(0)); | 646 scoped_refptr<LayerAnimationController> controller( |
531 controller->addObserver(&dummy); | 647 LayerAnimationController::Create(0)); |
532 | 648 controller->AddObserver(&dummy); |
533 scoped_ptr<Animation> toAdd(createAnimation(make_scoped_ptr(new FakeFloatTra nsition(1, 0, 1)).PassAs<AnimationCurve>(), 1, Animation::Opacity)); | 649 |
534 toAdd->setIterations(3); | 650 scoped_ptr<Animation> to_add(CreateAnimation( |
535 controller->addAnimation(toAdd.Pass()); | 651 make_scoped_ptr(new FakeFloatTransition(1.0, 0.f, 1.f)) |
536 | 652 .PassAs<AnimationCurve>(), |
537 controller->animate(0); | 653 1, |
538 controller->updateState(events.get()); | 654 Animation::Opacity)); |
539 EXPECT_TRUE(controller->hasActiveAnimation()); | 655 to_add->set_iterations(3); |
540 EXPECT_EQ(0, dummy.opacity()); | 656 controller->AddAnimation(to_add.Pass()); |
541 controller->animate(1.25); | 657 |
542 controller->updateState(events.get()); | 658 controller->Animate(0.0); |
543 EXPECT_TRUE(controller->hasActiveAnimation()); | 659 controller->UpdateState(events.get()); |
544 EXPECT_EQ(0.25, dummy.opacity()); | 660 EXPECT_TRUE(controller->HasActiveAnimation()); |
545 controller->animate(1.75); | 661 EXPECT_EQ(0, dummy.opacity()); |
546 controller->updateState(events.get()); | 662 controller->Animate(1.25); |
547 EXPECT_TRUE(controller->hasActiveAnimation()); | 663 controller->UpdateState(events.get()); |
548 EXPECT_EQ(0.75, dummy.opacity()); | 664 EXPECT_TRUE(controller->HasActiveAnimation()); |
549 controller->animate(2.25); | 665 EXPECT_EQ(0.25, dummy.opacity()); |
550 controller->updateState(events.get()); | 666 controller->Animate(1.75); |
551 EXPECT_TRUE(controller->hasActiveAnimation()); | 667 controller->UpdateState(events.get()); |
552 EXPECT_EQ(0.25, dummy.opacity()); | 668 EXPECT_TRUE(controller->HasActiveAnimation()); |
553 controller->animate(2.75); | 669 EXPECT_EQ(0.75, dummy.opacity()); |
554 controller->updateState(events.get()); | 670 controller->Animate(2.25); |
555 EXPECT_TRUE(controller->hasActiveAnimation()); | 671 controller->UpdateState(events.get()); |
556 EXPECT_EQ(0.75, dummy.opacity()); | 672 EXPECT_TRUE(controller->HasActiveAnimation()); |
557 controller->animate(3); | 673 EXPECT_EQ(0.25, dummy.opacity()); |
558 controller->updateState(events.get()); | 674 controller->Animate(2.75); |
559 EXPECT_FALSE(controller->hasActiveAnimation()); | 675 controller->UpdateState(events.get()); |
560 EXPECT_EQ(1, dummy.opacity()); | 676 EXPECT_TRUE(controller->HasActiveAnimation()); |
561 | 677 EXPECT_EQ(0.75, dummy.opacity()); |
562 // Just be extra sure. | 678 controller->Animate(3.0); |
563 controller->animate(4); | 679 controller->UpdateState(events.get()); |
564 controller->updateState(events.get()); | 680 EXPECT_FALSE(controller->HasActiveAnimation()); |
565 EXPECT_EQ(1, dummy.opacity()); | 681 EXPECT_EQ(1, dummy.opacity()); |
682 | |
683 // Just be extra sure. | |
684 controller->Animate(4.0); | |
685 controller->UpdateState(events.get()); | |
686 EXPECT_EQ(1, dummy.opacity()); | |
566 } | 687 } |
567 | 688 |
568 // Test that an infinitely looping animation does indeed go until aborted. | 689 // Test that an infinitely looping animation does indeed go until aborted. |
569 TEST(LayerAnimationControllerTest, InfiniteLooping) | 690 TEST(LayerAnimationControllerTest, InfiniteLooping) { |
570 { | 691 scoped_ptr<AnimationEventsVector> events( |
571 scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEvents Vector)); | 692 make_scoped_ptr(new AnimationEventsVector)); |
572 FakeLayerAnimationValueObserver dummy; | 693 FakeLayerAnimationValueObserver dummy; |
573 scoped_refptr<LayerAnimationController> controller(LayerAnimationController: :create(0)); | 694 scoped_refptr<LayerAnimationController> controller( |
574 controller->addObserver(&dummy); | 695 LayerAnimationController::Create(0)); |
575 | 696 controller->AddObserver(&dummy); |
576 const int id = 1; | 697 |
577 scoped_ptr<Animation> toAdd(createAnimation(make_scoped_ptr(new FakeFloatTra nsition(1, 0, 1)).PassAs<AnimationCurve>(), id, Animation::Opacity)); | 698 const int id = 1; |
578 toAdd->setIterations(-1); | 699 scoped_ptr<Animation> to_add(CreateAnimation( |
579 controller->addAnimation(toAdd.Pass()); | 700 make_scoped_ptr(new FakeFloatTransition(1.0, 0.f, 1.f)) |
580 | 701 .PassAs<AnimationCurve>(), id, Animation::Opacity)); |
581 controller->animate(0); | 702 to_add->set_iterations(-1); |
582 controller->updateState(events.get()); | 703 controller->AddAnimation(to_add.Pass()); |
583 EXPECT_TRUE(controller->hasActiveAnimation()); | 704 |
584 EXPECT_EQ(0, dummy.opacity()); | 705 controller->Animate(0.0); |
585 controller->animate(1.25); | 706 controller->UpdateState(events.get()); |
586 controller->updateState(events.get()); | 707 EXPECT_TRUE(controller->HasActiveAnimation()); |
587 EXPECT_TRUE(controller->hasActiveAnimation()); | 708 EXPECT_EQ(0, dummy.opacity()); |
588 EXPECT_EQ(0.25, dummy.opacity()); | 709 controller->Animate(1.25); |
589 controller->animate(1.75); | 710 controller->UpdateState(events.get()); |
590 controller->updateState(events.get()); | 711 EXPECT_TRUE(controller->HasActiveAnimation()); |
591 EXPECT_TRUE(controller->hasActiveAnimation()); | 712 EXPECT_EQ(0.25, dummy.opacity()); |
592 EXPECT_EQ(0.75, dummy.opacity()); | 713 controller->Animate(1.75); |
593 | 714 controller->UpdateState(events.get()); |
594 controller->animate(1073741824.25); | 715 EXPECT_TRUE(controller->HasActiveAnimation()); |
595 controller->updateState(events.get()); | 716 EXPECT_EQ(0.75, dummy.opacity()); |
596 EXPECT_TRUE(controller->hasActiveAnimation()); | 717 |
597 EXPECT_EQ(0.25, dummy.opacity()); | 718 controller->Animate(1073741824.25); |
598 controller->animate(1073741824.75); | 719 controller->UpdateState(events.get()); |
599 controller->updateState(events.get()); | 720 EXPECT_TRUE(controller->HasActiveAnimation()); |
600 EXPECT_TRUE(controller->hasActiveAnimation()); | 721 EXPECT_EQ(0.25, dummy.opacity()); |
601 EXPECT_EQ(0.75, dummy.opacity()); | 722 controller->Animate(1073741824.75); |
602 | 723 controller->UpdateState(events.get()); |
603 EXPECT_TRUE(controller->getAnimation(id, Animation::Opacity)); | 724 EXPECT_TRUE(controller->HasActiveAnimation()); |
604 controller->getAnimation(id, Animation::Opacity)->setRunState(Animation::Abo rted, 0.75); | 725 EXPECT_EQ(0.75, dummy.opacity()); |
605 EXPECT_FALSE(controller->hasActiveAnimation()); | 726 |
606 EXPECT_EQ(0.75, dummy.opacity()); | 727 EXPECT_TRUE(controller->GetAnimation(id, Animation::Opacity)); |
728 controller->GetAnimation(id, Animation::Opacity)->SetRunState( | |
729 Animation::Aborted, 0.75); | |
730 EXPECT_FALSE(controller->HasActiveAnimation()); | |
731 EXPECT_EQ(0.75, dummy.opacity()); | |
607 } | 732 } |
608 | 733 |
609 // Test that pausing and resuming work as expected. | 734 // Test that pausing and resuming work as expected. |
610 TEST(LayerAnimationControllerTest, PauseResume) | 735 TEST(LayerAnimationControllerTest, PauseResume) { |
611 { | 736 scoped_ptr<AnimationEventsVector> events( |
612 scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEvents Vector)); | 737 make_scoped_ptr(new AnimationEventsVector)); |
613 FakeLayerAnimationValueObserver dummy; | 738 FakeLayerAnimationValueObserver dummy; |
614 scoped_refptr<LayerAnimationController> controller(LayerAnimationController: :create(0)); | 739 scoped_refptr<LayerAnimationController> controller( |
615 controller->addObserver(&dummy); | 740 LayerAnimationController::Create(0)); |
616 | 741 controller->AddObserver(&dummy); |
617 const int id = 1; | 742 |
618 controller->addAnimation(createAnimation(make_scoped_ptr(new FakeFloatTransi tion(1, 0, 1)).PassAs<AnimationCurve>(), id, Animation::Opacity)); | 743 const int id = 1; |
619 | 744 controller->AddAnimation(CreateAnimation( |
620 controller->animate(0); | 745 make_scoped_ptr(new FakeFloatTransition(1.0, 0.f, 1.f)) |
621 controller->updateState(events.get()); | 746 .PassAs<AnimationCurve>(), id, Animation::Opacity)); |
622 EXPECT_TRUE(controller->hasActiveAnimation()); | 747 |
623 EXPECT_EQ(0, dummy.opacity()); | 748 controller->Animate(0.0); |
624 controller->animate(0.5); | 749 controller->UpdateState(events.get()); |
625 controller->updateState(events.get()); | 750 EXPECT_TRUE(controller->HasActiveAnimation()); |
626 EXPECT_TRUE(controller->hasActiveAnimation()); | 751 EXPECT_EQ(0, dummy.opacity()); |
627 EXPECT_EQ(0.5, dummy.opacity()); | 752 controller->Animate(0.5); |
628 | 753 controller->UpdateState(events.get()); |
629 EXPECT_TRUE(controller->getAnimation(id, Animation::Opacity)); | 754 EXPECT_TRUE(controller->HasActiveAnimation()); |
630 controller->getAnimation(id, Animation::Opacity)->setRunState(Animation::Pau sed, 0.5); | 755 EXPECT_EQ(0.5, dummy.opacity()); |
631 | 756 |
632 controller->animate(1024); | 757 EXPECT_TRUE(controller->GetAnimation(id, Animation::Opacity)); |
633 controller->updateState(events.get()); | 758 controller->GetAnimation(id, Animation::Opacity)->SetRunState( |
634 EXPECT_TRUE(controller->hasActiveAnimation()); | 759 Animation::Paused, 0.5); |
635 EXPECT_EQ(0.5, dummy.opacity()); | 760 |
636 | 761 controller->Animate(1024); |
637 EXPECT_TRUE(controller->getAnimation(id, Animation::Opacity)); | 762 controller->UpdateState(events.get()); |
638 controller->getAnimation(id, Animation::Opacity)->setRunState(Animation::Run ning, 1024); | 763 EXPECT_TRUE(controller->HasActiveAnimation()); |
639 | 764 EXPECT_EQ(0.5, dummy.opacity()); |
640 controller->animate(1024.25); | 765 |
641 controller->updateState(events.get()); | 766 EXPECT_TRUE(controller->GetAnimation(id, Animation::Opacity)); |
642 EXPECT_TRUE(controller->hasActiveAnimation()); | 767 controller->GetAnimation(id, Animation::Opacity)->SetRunState( |
643 EXPECT_EQ(0.75, dummy.opacity()); | 768 Animation::Running, 1024); |
644 controller->animate(1024.5); | 769 |
645 controller->updateState(events.get()); | 770 controller->Animate(1024.25); |
646 EXPECT_FALSE(controller->hasActiveAnimation()); | 771 controller->UpdateState(events.get()); |
647 EXPECT_EQ(1, dummy.opacity()); | 772 EXPECT_TRUE(controller->HasActiveAnimation()); |
648 } | 773 EXPECT_EQ(0.75, dummy.opacity()); |
649 | 774 controller->Animate(1024.5); |
650 TEST(LayerAnimationControllerTest, AbortAGroupedAnimation) | 775 controller->UpdateState(events.get()); |
651 { | 776 EXPECT_FALSE(controller->HasActiveAnimation()); |
652 scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEvents Vector)); | 777 EXPECT_EQ(1, dummy.opacity()); |
653 FakeLayerAnimationValueObserver dummy; | 778 } |
654 scoped_refptr<LayerAnimationController> controller(LayerAnimationController: :create(0)); | 779 |
655 controller->addObserver(&dummy); | 780 TEST(LayerAnimationControllerTest, AbortAGroupedAnimation) { |
656 | 781 scoped_ptr<AnimationEventsVector> events( |
657 const int id = 1; | 782 make_scoped_ptr(new AnimationEventsVector)); |
658 controller->addAnimation(createAnimation(make_scoped_ptr(new FakeTransformTr ansition(1)).PassAs<AnimationCurve>(), id, Animation::Transform)); | 783 FakeLayerAnimationValueObserver dummy; |
659 controller->addAnimation(createAnimation(make_scoped_ptr(new FakeFloatTransi tion(2, 0, 1)).PassAs<AnimationCurve>(), id, Animation::Opacity)); | 784 scoped_refptr<LayerAnimationController> controller( |
660 controller->addAnimation(createAnimation(make_scoped_ptr(new FakeFloatTransi tion(1, 1, 0.75)).PassAs<AnimationCurve>(), 2, Animation::Opacity)); | 785 LayerAnimationController::Create(0)); |
661 | 786 controller->AddObserver(&dummy); |
662 controller->animate(0); | 787 |
663 controller->updateState(events.get()); | 788 const int id = 1; |
664 EXPECT_TRUE(controller->hasActiveAnimation()); | 789 controller->AddAnimation(CreateAnimation( |
665 EXPECT_EQ(0, dummy.opacity()); | 790 make_scoped_ptr(new FakeTransformTransition(1)).PassAs<AnimationCurve>(), |
666 controller->animate(1); | 791 id, |
667 controller->updateState(events.get()); | 792 Animation::Transform)); |
668 EXPECT_TRUE(controller->hasActiveAnimation()); | 793 controller->AddAnimation(CreateAnimation( |
669 EXPECT_EQ(0.5, dummy.opacity()); | 794 make_scoped_ptr(new FakeFloatTransition(2.0, 0.f, 1.f)) |
670 | 795 .PassAs<AnimationCurve>(), |
671 EXPECT_TRUE(controller->getAnimation(id, Animation::Opacity)); | 796 id, |
672 controller->getAnimation(id, Animation::Opacity)->setRunState(Animation::Abo rted, 1); | 797 Animation::Opacity)); |
673 controller->animate(1); | 798 controller->AddAnimation(CreateAnimation( |
674 controller->updateState(events.get()); | 799 make_scoped_ptr(new FakeFloatTransition(1.0, 1.f, 0.75f)) |
675 EXPECT_TRUE(controller->hasActiveAnimation()); | 800 .PassAs<AnimationCurve>(), |
676 EXPECT_EQ(1, dummy.opacity()); | 801 2, |
677 controller->animate(2); | 802 Animation::Opacity)); |
678 controller->updateState(events.get()); | 803 |
679 EXPECT_TRUE(!controller->hasActiveAnimation()); | 804 controller->Animate(0.0); |
680 EXPECT_EQ(0.75, dummy.opacity()); | 805 controller->UpdateState(events.get()); |
681 } | 806 EXPECT_TRUE(controller->HasActiveAnimation()); |
682 | 807 EXPECT_EQ(0, dummy.opacity()); |
683 TEST(LayerAnimationControllerTest, ForceSyncWhenSynchronizedStartTimeNeeded) | 808 controller->Animate(1.0); |
684 { | 809 controller->UpdateState(events.get()); |
685 FakeLayerAnimationValueObserver dummyImpl; | 810 EXPECT_TRUE(controller->HasActiveAnimation()); |
686 scoped_refptr<LayerAnimationController> controllerImpl(LayerAnimationControl ler::create(0)); | 811 EXPECT_EQ(0.5, dummy.opacity()); |
687 controllerImpl->addObserver(&dummyImpl); | 812 |
688 scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEvents Vector)); | 813 EXPECT_TRUE(controller->GetAnimation(id, Animation::Opacity)); |
689 FakeLayerAnimationValueObserver dummy; | 814 controller->GetAnimation(id, Animation::Opacity)->SetRunState( |
690 scoped_refptr<LayerAnimationController> controller(LayerAnimationController: :create(0)); | 815 Animation::Aborted, 1); |
691 controller->addObserver(&dummy); | 816 controller->Animate(1.0); |
692 | 817 controller->UpdateState(events.get()); |
693 scoped_ptr<Animation> toAdd(createAnimation(make_scoped_ptr(new FakeFloatTra nsition(2, 0, 1)).PassAs<AnimationCurve>(), 0, Animation::Opacity)); | 818 EXPECT_TRUE(controller->HasActiveAnimation()); |
694 toAdd->setNeedsSynchronizedStartTime(true); | 819 EXPECT_EQ(1, dummy.opacity()); |
695 controller->addAnimation(toAdd.Pass()); | 820 controller->Animate(2.0); |
696 | 821 controller->UpdateState(events.get()); |
697 controller->animate(0); | 822 EXPECT_TRUE(!controller->HasActiveAnimation()); |
698 controller->updateState(events.get()); | 823 EXPECT_EQ(0.75, dummy.opacity()); |
699 EXPECT_TRUE(controller->hasActiveAnimation()); | 824 } |
700 Animation* activeAnimation = controller->getAnimation(0, Animation::Opacity) ; | 825 |
701 EXPECT_TRUE(activeAnimation); | 826 TEST(LayerAnimationControllerTest, ForceSyncWhenSynchronizedStartTimeNeeded) { |
702 EXPECT_TRUE(activeAnimation->needsSynchronizedStartTime()); | 827 FakeLayerAnimationValueObserver dummy_impl; |
703 | 828 scoped_refptr<LayerAnimationController> controller_impl( |
704 controller->setForceSync(); | 829 LayerAnimationController::Create(0)); |
705 | 830 controller_impl->AddObserver(&dummy_impl); |
706 controller->pushAnimationUpdatesTo(controllerImpl.get()); | 831 scoped_ptr<AnimationEventsVector> events( |
707 | 832 make_scoped_ptr(new AnimationEventsVector)); |
708 activeAnimation = controllerImpl->getAnimation(0, Animation::Opacity); | 833 FakeLayerAnimationValueObserver dummy; |
709 EXPECT_TRUE(activeAnimation); | 834 scoped_refptr<LayerAnimationController> controller( |
710 EXPECT_EQ(Animation::WaitingForTargetAvailability, activeAnimation->runState ()); | 835 LayerAnimationController::Create(0)); |
836 controller->AddObserver(&dummy); | |
837 | |
838 scoped_ptr<Animation> to_add(CreateAnimation( | |
839 make_scoped_ptr(new FakeFloatTransition(2.0, 0.f, 1.f)) | |
840 .PassAs<AnimationCurve>(), | |
841 0, | |
842 Animation::Opacity)); | |
843 to_add->set_needs_synchronized_start_time(true); | |
844 controller->AddAnimation(to_add.Pass()); | |
845 | |
846 controller->Animate(0.0); | |
847 controller->UpdateState(events.get()); | |
848 EXPECT_TRUE(controller->HasActiveAnimation()); | |
849 Animation* active_animation = controller->GetAnimation(0, Animation::Opacity); | |
850 EXPECT_TRUE(active_animation); | |
851 EXPECT_TRUE(active_animation->needs_synchronized_start_time()); | |
852 | |
853 controller->set_force_sync(); | |
854 | |
855 controller->PushAnimationUpdatesTo(controller_impl.get()); | |
856 | |
857 active_animation = controller_impl->GetAnimation(0, Animation::Opacity); | |
858 EXPECT_TRUE(active_animation); | |
859 EXPECT_EQ(Animation::WaitingForTargetAvailability, | |
860 active_animation->run_state()); | |
711 } | 861 } |
712 | 862 |
713 // Tests that skipping a call to updateState works as expected. | 863 // Tests that skipping a call to updateState works as expected. |
714 TEST(LayerAnimationControllerTest, SkipUpdateState) | 864 TEST(LayerAnimationControllerTest, SkipUpdateState) { |
715 { | 865 scoped_ptr<AnimationEventsVector> events( |
716 scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEvents Vector)); | 866 make_scoped_ptr(new AnimationEventsVector)); |
717 FakeLayerAnimationValueObserver dummy; | 867 FakeLayerAnimationValueObserver dummy; |
718 scoped_refptr<LayerAnimationController> controller(LayerAnimationController: :create(0)); | 868 scoped_refptr<LayerAnimationController> controller( |
719 controller->addObserver(&dummy); | 869 LayerAnimationController::Create(0)); |
720 | 870 controller->AddObserver(&dummy); |
721 controller->addAnimation(createAnimation(make_scoped_ptr(new FakeTransformTr ansition(1)).PassAs<AnimationCurve>(), 1, Animation::Transform)); | 871 |
722 | 872 controller->AddAnimation(CreateAnimation( |
723 controller->animate(0); | 873 make_scoped_ptr(new FakeTransformTransition(1)).PassAs<AnimationCurve>(), |
724 controller->updateState(events.get()); | 874 1, |
725 | 875 Animation::Transform)); |
726 controller->addAnimation(createAnimation(make_scoped_ptr(new FakeFloatTransi tion(1, 0, 1)).PassAs<AnimationCurve>(), 2, Animation::Opacity)); | 876 |
727 | 877 controller->Animate(0.0); |
728 // Animate but don't updateState. | 878 controller->UpdateState(events.get()); |
729 controller->animate(1); | 879 |
730 | 880 controller->AddAnimation(CreateAnimation( |
731 controller->animate(2); | 881 make_scoped_ptr(new FakeFloatTransition(1.0, 0.f, 1.f)) |
732 events.reset(new AnimationEventsVector); | 882 .PassAs<AnimationCurve>(), |
733 controller->updateState(events.get()); | 883 2, |
734 | 884 Animation::Opacity)); |
735 // Should have one Started event and one Finished event. | 885 |
736 EXPECT_EQ(2, events->size()); | 886 // Animate but don't updateState. |
737 EXPECT_NE((*events)[0].type, (*events)[1].type); | 887 controller->Animate(1.0); |
738 | 888 |
739 // The float transition should still be at its starting point. | 889 controller->Animate(2.0); |
740 EXPECT_TRUE(controller->hasActiveAnimation()); | 890 events.reset(new AnimationEventsVector); |
741 EXPECT_EQ(0, dummy.opacity()); | 891 controller->UpdateState(events.get()); |
742 | 892 |
743 controller->animate(3); | 893 // Should have one Started event and one Finished event. |
744 controller->updateState(events.get()); | 894 EXPECT_EQ(2, events->size()); |
745 | 895 EXPECT_NE((*events)[0].type, (*events)[1].type); |
746 // The float tranisition should now be done. | 896 |
747 EXPECT_EQ(1, dummy.opacity()); | 897 // The float transition should still be at its starting point. |
748 EXPECT_FALSE(controller->hasActiveAnimation()); | 898 EXPECT_TRUE(controller->HasActiveAnimation()); |
899 EXPECT_EQ(0, dummy.opacity()); | |
900 | |
901 controller->Animate(3.0); | |
902 controller->UpdateState(events.get()); | |
903 | |
904 // The float tranisition should now be done. | |
905 EXPECT_EQ(1, dummy.opacity()); | |
906 EXPECT_FALSE(controller->HasActiveAnimation()); | |
749 } | 907 } |
750 | 908 |
751 } // namespace | 909 } // namespace |
752 } // namespace cc | 910 } // namespace cc |
OLD | NEW |