Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(149)

Side by Side Diff: cc/animation/element_animations_unittest.cc

Issue 2377223002: CC Animations: Rewrite unit tests to work with AnimationPlayer. (Closed)
Patch Set: Reparent. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/animation/element_animations.cc ('k') | cc/animation/scroll_offset_animations_impl.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/animation/element_animations.h" 5 #include "cc/animation/element_animations.h"
6 6
7 #include "cc/animation/animation_delegate.h" 7 #include "cc/animation/animation_delegate.h"
8 #include "cc/animation/animation_events.h"
8 #include "cc/animation/animation_host.h" 9 #include "cc/animation/animation_host.h"
9 #include "cc/animation/animation_id_provider.h" 10 #include "cc/animation/animation_id_provider.h"
10 #include "cc/animation/animation_player.h" 11 #include "cc/animation/animation_player.h"
11 #include "cc/animation/animation_timeline.h" 12 #include "cc/animation/animation_timeline.h"
12 #include "cc/animation/keyframed_animation_curve.h" 13 #include "cc/animation/keyframed_animation_curve.h"
13 #include "cc/animation/scroll_offset_animation_curve.h" 14 #include "cc/animation/scroll_offset_animation_curve.h"
14 #include "cc/animation/transform_operations.h" 15 #include "cc/animation/transform_operations.h"
15 #include "cc/test/animation_test_common.h" 16 #include "cc/test/animation_test_common.h"
16 #include "cc/test/animation_timelines_test_common.h" 17 #include "cc/test/animation_timelines_test_common.h"
17 #include "ui/gfx/geometry/box_f.h" 18 #include "ui/gfx/geometry/box_f.h"
(...skipping 24 matching lines...) Expand all
42 43
43 TEST_F(ElementAnimationsTest, AttachToLayerInActiveTree) { 44 TEST_F(ElementAnimationsTest, AttachToLayerInActiveTree) {
44 // Set up the layer which is in active tree for main thread and not 45 // Set up the layer which is in active tree for main thread and not
45 // yet passed onto the impl thread. 46 // yet passed onto the impl thread.
46 client_.RegisterElement(element_id_, ElementListType::ACTIVE); 47 client_.RegisterElement(element_id_, ElementListType::ACTIVE);
47 client_impl_.RegisterElement(element_id_, ElementListType::PENDING); 48 client_impl_.RegisterElement(element_id_, ElementListType::PENDING);
48 49
49 EXPECT_TRUE(client_.IsElementInList(element_id_, ElementListType::ACTIVE)); 50 EXPECT_TRUE(client_.IsElementInList(element_id_, ElementListType::ACTIVE));
50 EXPECT_FALSE(client_.IsElementInList(element_id_, ElementListType::PENDING)); 51 EXPECT_FALSE(client_.IsElementInList(element_id_, ElementListType::PENDING));
51 52
52 host_->AddAnimationTimeline(timeline_); 53 AttachTimelinePlayerLayer();
53 54
54 timeline_->AttachPlayer(player_); 55 EXPECT_TRUE(element_animations_->has_element_in_active_list());
55 player_->AttachElement(element_id_); 56 EXPECT_FALSE(element_animations_->has_element_in_pending_list());
56
57 scoped_refptr<ElementAnimations> element_animations =
58 player_->element_animations();
59 EXPECT_TRUE(element_animations);
60
61 EXPECT_TRUE(element_animations->has_element_in_active_list());
62 EXPECT_FALSE(element_animations->has_element_in_pending_list());
63 57
64 PushProperties(); 58 PushProperties();
65 59
66 GetImplTimelineAndPlayerByID(); 60 GetImplTimelineAndPlayerByID();
67 61
68 scoped_refptr<ElementAnimations> element_animations_impl = 62 EXPECT_FALSE(element_animations_impl_->has_element_in_active_list());
69 player_impl_->element_animations(); 63 EXPECT_TRUE(element_animations_impl_->has_element_in_pending_list());
70 EXPECT_TRUE(element_animations_impl);
71
72 EXPECT_FALSE(element_animations_impl->has_element_in_active_list());
73 EXPECT_TRUE(element_animations_impl->has_element_in_pending_list());
74 64
75 // Create the layer in the impl active tree. 65 // Create the layer in the impl active tree.
76 client_impl_.RegisterElement(element_id_, ElementListType::ACTIVE); 66 client_impl_.RegisterElement(element_id_, ElementListType::ACTIVE);
77 EXPECT_TRUE(element_animations_impl->has_element_in_active_list()); 67 EXPECT_TRUE(element_animations_impl_->has_element_in_active_list());
78 EXPECT_TRUE(element_animations_impl->has_element_in_pending_list()); 68 EXPECT_TRUE(element_animations_impl_->has_element_in_pending_list());
79 69
80 EXPECT_TRUE( 70 EXPECT_TRUE(
81 client_impl_.IsElementInList(element_id_, ElementListType::ACTIVE)); 71 client_impl_.IsElementInList(element_id_, ElementListType::ACTIVE));
82 EXPECT_TRUE( 72 EXPECT_TRUE(
83 client_impl_.IsElementInList(element_id_, ElementListType::PENDING)); 73 client_impl_.IsElementInList(element_id_, ElementListType::PENDING));
84 74
85 // kill layer on main thread. 75 // kill layer on main thread.
86 client_.UnregisterElement(element_id_, ElementListType::ACTIVE); 76 client_.UnregisterElement(element_id_, ElementListType::ACTIVE);
87 EXPECT_EQ(element_animations, player_->element_animations()); 77 EXPECT_EQ(element_animations_, player_->element_animations());
88 EXPECT_FALSE(element_animations->has_element_in_active_list()); 78 EXPECT_FALSE(element_animations_->has_element_in_active_list());
89 EXPECT_FALSE(element_animations->has_element_in_pending_list()); 79 EXPECT_FALSE(element_animations_->has_element_in_pending_list());
90 80
91 // Sync doesn't detach LayerImpl. 81 // Sync doesn't detach LayerImpl.
92 PushProperties(); 82 PushProperties();
93 EXPECT_EQ(element_animations_impl, player_impl_->element_animations()); 83 EXPECT_EQ(element_animations_impl_, player_impl_->element_animations());
94 EXPECT_TRUE(element_animations_impl->has_element_in_active_list()); 84 EXPECT_TRUE(element_animations_impl_->has_element_in_active_list());
95 EXPECT_TRUE(element_animations_impl->has_element_in_pending_list()); 85 EXPECT_TRUE(element_animations_impl_->has_element_in_pending_list());
96 86
97 // Kill layer on impl thread in pending tree. 87 // Kill layer on impl thread in pending tree.
98 client_impl_.UnregisterElement(element_id_, ElementListType::PENDING); 88 client_impl_.UnregisterElement(element_id_, ElementListType::PENDING);
99 EXPECT_EQ(element_animations_impl, player_impl_->element_animations()); 89 EXPECT_EQ(element_animations_impl_, player_impl_->element_animations());
100 EXPECT_TRUE(element_animations_impl->has_element_in_active_list()); 90 EXPECT_TRUE(element_animations_impl_->has_element_in_active_list());
101 EXPECT_FALSE(element_animations_impl->has_element_in_pending_list()); 91 EXPECT_FALSE(element_animations_impl_->has_element_in_pending_list());
102 92
103 // Kill layer on impl thread in active tree. 93 // Kill layer on impl thread in active tree.
104 client_impl_.UnregisterElement(element_id_, ElementListType::ACTIVE); 94 client_impl_.UnregisterElement(element_id_, ElementListType::ACTIVE);
105 EXPECT_EQ(element_animations_impl, player_impl_->element_animations()); 95 EXPECT_EQ(element_animations_impl_, player_impl_->element_animations());
106 EXPECT_FALSE(element_animations_impl->has_element_in_active_list()); 96 EXPECT_FALSE(element_animations_impl_->has_element_in_active_list());
107 EXPECT_FALSE(element_animations_impl->has_element_in_pending_list()); 97 EXPECT_FALSE(element_animations_impl_->has_element_in_pending_list());
108 98
109 // Sync doesn't change anything. 99 // Sync doesn't change anything.
110 PushProperties(); 100 PushProperties();
111 EXPECT_EQ(element_animations_impl, player_impl_->element_animations()); 101 EXPECT_EQ(element_animations_impl_, player_impl_->element_animations());
112 EXPECT_FALSE(element_animations_impl->has_element_in_active_list()); 102 EXPECT_FALSE(element_animations_impl_->has_element_in_active_list());
113 EXPECT_FALSE(element_animations_impl->has_element_in_pending_list()); 103 EXPECT_FALSE(element_animations_impl_->has_element_in_pending_list());
114 104
115 player_->DetachElement(); 105 player_->DetachElement();
116 EXPECT_FALSE(player_->element_animations()); 106 EXPECT_FALSE(player_->element_animations());
117 107
118 // Release ptrs now to test the order of destruction. 108 // Release ptrs now to test the order of destruction.
119 ReleaseRefPtrs(); 109 ReleaseRefPtrs();
120 } 110 }
121 111
122 TEST_F(ElementAnimationsTest, AttachToNotYetCreatedLayer) { 112 TEST_F(ElementAnimationsTest, AttachToNotYetCreatedLayer) {
123 host_->AddAnimationTimeline(timeline_); 113 host_->AddAnimationTimeline(timeline_);
124 timeline_->AttachPlayer(player_); 114 timeline_->AttachPlayer(player_);
125 115
126 PushProperties(); 116 PushProperties();
127 GetImplTimelineAndPlayerByID(); 117 GetImplTimelineAndPlayerByID();
128 118
119 // Perform attachment separately.
129 player_->AttachElement(element_id_); 120 player_->AttachElement(element_id_);
121 element_animations_ = player_->element_animations();
130 122
131 scoped_refptr<ElementAnimations> element_animations = 123 EXPECT_FALSE(element_animations_->has_element_in_active_list());
132 player_->element_animations(); 124 EXPECT_FALSE(element_animations_->has_element_in_pending_list());
133 EXPECT_TRUE(element_animations);
134
135 EXPECT_FALSE(element_animations->has_element_in_active_list());
136 EXPECT_FALSE(element_animations->has_element_in_pending_list());
137 125
138 PushProperties(); 126 PushProperties();
127 element_animations_impl_ = player_impl_->element_animations();
139 128
140 scoped_refptr<ElementAnimations> element_animations_impl = 129 EXPECT_FALSE(element_animations_impl_->has_element_in_active_list());
141 player_impl_->element_animations(); 130 EXPECT_FALSE(element_animations_impl_->has_element_in_pending_list());
142 EXPECT_TRUE(element_animations_impl);
143
144 EXPECT_FALSE(element_animations_impl->has_element_in_active_list());
145 EXPECT_FALSE(element_animations_impl->has_element_in_pending_list());
146 131
147 // Create layer. 132 // Create layer.
148 client_.RegisterElement(element_id_, ElementListType::ACTIVE); 133 client_.RegisterElement(element_id_, ElementListType::ACTIVE);
149 EXPECT_TRUE(element_animations->has_element_in_active_list()); 134 EXPECT_TRUE(element_animations_->has_element_in_active_list());
150 EXPECT_FALSE(element_animations->has_element_in_pending_list()); 135 EXPECT_FALSE(element_animations_->has_element_in_pending_list());
151 136
152 client_impl_.RegisterElement(element_id_, ElementListType::PENDING); 137 client_impl_.RegisterElement(element_id_, ElementListType::PENDING);
153 EXPECT_FALSE(element_animations_impl->has_element_in_active_list()); 138 EXPECT_FALSE(element_animations_impl_->has_element_in_active_list());
154 EXPECT_TRUE(element_animations_impl->has_element_in_pending_list()); 139 EXPECT_TRUE(element_animations_impl_->has_element_in_pending_list());
155 140
156 client_impl_.RegisterElement(element_id_, ElementListType::ACTIVE); 141 client_impl_.RegisterElement(element_id_, ElementListType::ACTIVE);
157 EXPECT_TRUE(element_animations_impl->has_element_in_active_list()); 142 EXPECT_TRUE(element_animations_impl_->has_element_in_active_list());
158 EXPECT_TRUE(element_animations_impl->has_element_in_pending_list()); 143 EXPECT_TRUE(element_animations_impl_->has_element_in_pending_list());
159 } 144 }
160 145
161 TEST_F(ElementAnimationsTest, AddRemovePlayers) { 146 TEST_F(ElementAnimationsTest, AddRemovePlayers) {
162 host_->AddAnimationTimeline(timeline_); 147 host_->AddAnimationTimeline(timeline_);
163 timeline_->AttachPlayer(player_); 148 timeline_->AttachPlayer(player_);
164 player_->AttachElement(element_id_); 149 player_->AttachElement(element_id_);
165 150
166 scoped_refptr<ElementAnimations> element_animations = 151 scoped_refptr<ElementAnimations> element_animations =
167 player_->element_animations(); 152 player_->element_animations();
168 EXPECT_TRUE(element_animations); 153 EXPECT_TRUE(element_animations);
(...skipping 15 matching lines...) Expand all
184 169
185 PushProperties(); 170 PushProperties();
186 GetImplTimelineAndPlayerByID(); 171 GetImplTimelineAndPlayerByID();
187 172
188 scoped_refptr<ElementAnimations> element_animations_impl = 173 scoped_refptr<ElementAnimations> element_animations_impl =
189 player_impl_->element_animations(); 174 player_impl_->element_animations();
190 EXPECT_TRUE(element_animations_impl); 175 EXPECT_TRUE(element_animations_impl);
191 176
192 int list_size_before = 0; 177 int list_size_before = 0;
193 ElementAnimations::PlayersList::Iterator it( 178 ElementAnimations::PlayersList::Iterator it(
194 &element_animations_impl->players_list()); 179 &element_animations_impl_->players_list());
195 AnimationPlayer* player; 180 AnimationPlayer* player;
196 while ((player = it.GetNext()) != nullptr) { 181 while ((player = it.GetNext()) != nullptr) {
197 EXPECT_TRUE(timeline_->GetPlayerById(player->id())); 182 EXPECT_TRUE(timeline_->GetPlayerById(player->id()));
198 ++list_size_before; 183 ++list_size_before;
199 } 184 }
200 EXPECT_EQ(3, list_size_before); 185 EXPECT_EQ(3, list_size_before);
201 186
202 player2->DetachElement(); 187 player2->DetachElement();
203 EXPECT_FALSE(player2->element_animations()); 188 EXPECT_FALSE(player2->element_animations());
204 EXPECT_EQ(element_animations, player_->element_animations()); 189 EXPECT_EQ(element_animations, player_->element_animations());
205 EXPECT_EQ(element_animations, player1->element_animations()); 190 EXPECT_EQ(element_animations, player1->element_animations());
206 191
207 PushProperties(); 192 PushProperties();
208 EXPECT_EQ(element_animations_impl, player_impl_->element_animations()); 193 EXPECT_EQ(element_animations_impl, player_impl_->element_animations());
209 194
210 int list_size_after = 0; 195 int list_size_after = 0;
211 it = ElementAnimations::PlayersList::Iterator( 196 it = ElementAnimations::PlayersList::Iterator(
212 &element_animations_impl->players_list()); 197 &element_animations_impl_->players_list());
213 while ((player = it.GetNext()) != nullptr) { 198 while ((player = it.GetNext()) != nullptr) {
214 EXPECT_TRUE(timeline_->GetPlayerById(player->id())); 199 EXPECT_TRUE(timeline_->GetPlayerById(player->id()));
215 ++list_size_after; 200 ++list_size_after;
216 } 201 }
217 EXPECT_EQ(2, list_size_after); 202 EXPECT_EQ(2, list_size_after);
218 } 203 }
219 204
220 TEST_F(ElementAnimationsTest, SyncNewAnimation) { 205 TEST_F(ElementAnimationsTest, SyncNewAnimation) {
221 CreateTestLayer(true, false); 206 CreateTestLayer(true, false);
222 AttachTimelinePlayerLayer(); 207 AttachTimelinePlayerLayer();
223 CreateImplTimelineAndPlayer(); 208 CreateImplTimelineAndPlayer();
224 209
225 scoped_refptr<ElementAnimations> animations = element_animations(); 210 EXPECT_FALSE(player_impl_->GetAnimation(TargetProperty::OPACITY));
226 scoped_refptr<ElementAnimations> animations_impl = element_animations_impl();
227 211
228 EXPECT_FALSE(animations_impl->GetAnimation(TargetProperty::OPACITY)); 212 EXPECT_FALSE(player_->needs_to_start_animations());
229 213 EXPECT_FALSE(player_impl_->needs_to_start_animations());
230 EXPECT_FALSE(animations->needs_to_start_animations_for_testing());
231 EXPECT_FALSE(animations_impl->needs_to_start_animations_for_testing());
232 214
233 int animation_id = 215 int animation_id =
234 AddOpacityTransitionToPlayer(player_.get(), 1, 0, 1, false); 216 AddOpacityTransitionToPlayer(player_.get(), 1, 0, 1, false);
235 EXPECT_TRUE(animations->needs_to_start_animations_for_testing()); 217 EXPECT_TRUE(player_->needs_to_start_animations());
236 218
237 PushProperties(); 219 PushProperties();
238 EXPECT_TRUE(animations_impl->needs_to_start_animations_for_testing()); 220 EXPECT_TRUE(player_impl_->needs_to_start_animations());
239 animations_impl->ActivateAnimations(); 221 player_impl_->ActivateAnimations();
240 222
241 EXPECT_TRUE(animations_impl->GetAnimationById(animation_id)); 223 EXPECT_TRUE(player_impl_->GetAnimationById(animation_id));
242 EXPECT_EQ(Animation::WAITING_FOR_TARGET_AVAILABILITY, 224 EXPECT_EQ(Animation::WAITING_FOR_TARGET_AVAILABILITY,
243 animations_impl->GetAnimationById(animation_id)->run_state()); 225 player_impl_->GetAnimationById(animation_id)->run_state());
244 } 226 }
245 227
246 TEST_F(ElementAnimationsTest, 228 TEST_F(ElementAnimationsTest,
247 SyncScrollOffsetAnimationRespectsHasSetInitialValue) { 229 SyncScrollOffsetAnimationRespectsHasSetInitialValue) {
248 CreateTestLayer(true, false); 230 CreateTestLayer(true, false);
249 AttachTimelinePlayerLayer(); 231 AttachTimelinePlayerLayer();
250 CreateImplTimelineAndPlayer(); 232 CreateImplTimelineAndPlayer();
251 233
252 scoped_refptr<ElementAnimations> animations = element_animations(); 234 EXPECT_FALSE(player_impl_->GetAnimation(TargetProperty::SCROLL_OFFSET));
253 scoped_refptr<ElementAnimations> animations_impl = element_animations_impl();
254 235
255 EXPECT_FALSE(animations_impl->GetAnimation(TargetProperty::SCROLL_OFFSET)); 236 EXPECT_FALSE(player_->needs_to_start_animations());
256 237 EXPECT_FALSE(player_impl_->needs_to_start_animations());
257 EXPECT_FALSE(animations->needs_to_start_animations_for_testing());
258 EXPECT_FALSE(animations_impl->needs_to_start_animations_for_testing());
259 238
260 gfx::ScrollOffset initial_value(100.f, 300.f); 239 gfx::ScrollOffset initial_value(100.f, 300.f);
261 gfx::ScrollOffset provider_initial_value(150.f, 300.f); 240 gfx::ScrollOffset provider_initial_value(150.f, 300.f);
262 gfx::ScrollOffset target_value(300.f, 200.f); 241 gfx::ScrollOffset target_value(300.f, 200.f);
263 242
264 client_impl_.SetScrollOffsetForAnimation(provider_initial_value); 243 client_impl_.SetScrollOffsetForAnimation(provider_initial_value);
265 244
266 // Animation with initial value set. 245 // Animation with initial value set.
267 std::unique_ptr<ScrollOffsetAnimationCurve> curve_fixed( 246 std::unique_ptr<ScrollOffsetAnimationCurve> curve_fixed(
268 ScrollOffsetAnimationCurve::Create( 247 ScrollOffsetAnimationCurve::Create(
269 target_value, CubicBezierTimingFunction::CreatePreset( 248 target_value, CubicBezierTimingFunction::CreatePreset(
270 CubicBezierTimingFunction::EaseType::EASE_IN_OUT))); 249 CubicBezierTimingFunction::EaseType::EASE_IN_OUT)));
271 curve_fixed->SetInitialValue(initial_value); 250 curve_fixed->SetInitialValue(initial_value);
272 const int animation1_id = 1; 251 const int animation1_id = 1;
273 std::unique_ptr<Animation> animation_fixed(Animation::Create( 252 std::unique_ptr<Animation> animation_fixed(Animation::Create(
274 std::move(curve_fixed), animation1_id, 0, TargetProperty::SCROLL_OFFSET)); 253 std::move(curve_fixed), animation1_id, 0, TargetProperty::SCROLL_OFFSET));
275 animations->AddAnimation(std::move(animation_fixed)); 254 player_->AddAnimation(std::move(animation_fixed));
276 PushProperties(); 255 PushProperties();
277 EXPECT_VECTOR2DF_EQ(initial_value, 256 EXPECT_VECTOR2DF_EQ(initial_value,
278 animations_impl->GetAnimationById(animation1_id) 257 player_impl_->GetAnimationById(animation1_id)
279 ->curve() 258 ->curve()
280 ->ToScrollOffsetAnimationCurve() 259 ->ToScrollOffsetAnimationCurve()
281 ->GetValue(base::TimeDelta())); 260 ->GetValue(base::TimeDelta()));
282 261
283 // Animation without initial value set. 262 // Animation without initial value set.
284 std::unique_ptr<ScrollOffsetAnimationCurve> curve( 263 std::unique_ptr<ScrollOffsetAnimationCurve> curve(
285 ScrollOffsetAnimationCurve::Create( 264 ScrollOffsetAnimationCurve::Create(
286 target_value, CubicBezierTimingFunction::CreatePreset( 265 target_value, CubicBezierTimingFunction::CreatePreset(
287 CubicBezierTimingFunction::EaseType::EASE_IN_OUT))); 266 CubicBezierTimingFunction::EaseType::EASE_IN_OUT)));
288 const int animation2_id = 2; 267 const int animation2_id = 2;
289 std::unique_ptr<Animation> animation(Animation::Create( 268 std::unique_ptr<Animation> animation(Animation::Create(
290 std::move(curve), animation2_id, 0, TargetProperty::SCROLL_OFFSET)); 269 std::move(curve), animation2_id, 0, TargetProperty::SCROLL_OFFSET));
291 animations->AddAnimation(std::move(animation)); 270 player_->AddAnimation(std::move(animation));
292 PushProperties(); 271 PushProperties();
293 EXPECT_VECTOR2DF_EQ(provider_initial_value, 272 EXPECT_VECTOR2DF_EQ(provider_initial_value,
294 animations_impl->GetAnimationById(animation2_id) 273 player_impl_->GetAnimationById(animation2_id)
295 ->curve() 274 ->curve()
296 ->ToScrollOffsetAnimationCurve() 275 ->ToScrollOffsetAnimationCurve()
297 ->GetValue(base::TimeDelta())); 276 ->GetValue(base::TimeDelta()));
298 } 277 }
299 278
300 class TestAnimationDelegateThatDestroysPlayer : public TestAnimationDelegate { 279 class TestAnimationDelegateThatDestroysPlayer : public TestAnimationDelegate {
301 public: 280 public:
302 TestAnimationDelegateThatDestroysPlayer() {} 281 TestAnimationDelegateThatDestroysPlayer() {}
303 282
304 void NotifyAnimationStarted(base::TimeTicks monotonic_time, 283 void NotifyAnimationStarted(base::TimeTicks monotonic_time,
(...skipping 18 matching lines...) Expand all
323 }; 302 };
324 303
325 // Test that we don't crash if a player is deleted while ElementAnimations is 304 // Test that we don't crash if a player is deleted while ElementAnimations is
326 // iterating through the list of players (see crbug.com/631052). This test 305 // iterating through the list of players (see crbug.com/631052). This test
327 // passes if it doesn't crash. 306 // passes if it doesn't crash.
328 TEST_F(ElementAnimationsTest, AddedPlayerIsDestroyed) { 307 TEST_F(ElementAnimationsTest, AddedPlayerIsDestroyed) {
329 CreateTestLayer(true, false); 308 CreateTestLayer(true, false);
330 AttachTimelinePlayerLayer(); 309 AttachTimelinePlayerLayer();
331 CreateImplTimelineAndPlayer(); 310 CreateImplTimelineAndPlayer();
332 311
333 scoped_refptr<ElementAnimations> animations = element_animations();
334 scoped_refptr<ElementAnimations> animations_impl = element_animations_impl();
335
336 TestAnimationDelegateThatDestroysPlayer delegate; 312 TestAnimationDelegateThatDestroysPlayer delegate;
337 313
338 scoped_refptr<AnimationPlayer> player2 = 314 const int player2_id = AnimationIdProvider::NextPlayerId();
339 AnimationPlayer::Create(AnimationIdProvider::NextPlayerId()); 315 scoped_refptr<AnimationPlayer> player2 = AnimationPlayer::Create(player2_id);
340 delegate.setTimelineAndPlayer(timeline_, player2); 316 delegate.setTimelineAndPlayer(timeline_, player2);
341 317
342 timeline_->AttachPlayer(player2); 318 timeline_->AttachPlayer(player2);
343 player2->AttachElement(element_id_); 319 player2->AttachElement(element_id_);
344 player2->set_animation_delegate(&delegate); 320 player2->set_animation_delegate(&delegate);
345 321
346 int animation_id = 322 int animation_id =
347 AddOpacityTransitionToPlayer(player2.get(), 1.0, 0.f, 1.f, false); 323 AddOpacityTransitionToPlayer(player2.get(), 1.0, 0.f, 1.f, false);
348 324
349 PushProperties(); 325 PushProperties();
350 326
351 animations_impl->ActivateAnimations(); 327 scoped_refptr<AnimationPlayer> player2_impl =
352 EXPECT_TRUE(animations_impl->GetAnimationById(animation_id)); 328 timeline_impl_->GetPlayerById(player2_id);
329 DCHECK(player2_impl);
353 330
354 animations_impl->Animate(kInitialTickTime); 331 player2_impl->ActivateAnimations();
332 EXPECT_TRUE(player2_impl->GetAnimationById(animation_id));
333
334 scoped_refptr<ElementAnimations> element_animations_impl =
335 player2_impl->element_animations();
336
337 element_animations_impl_->Animate(kInitialTickTime);
355 338
356 auto events = host_impl_->CreateEvents(); 339 auto events = host_impl_->CreateEvents();
357 animations_impl->UpdateState(true, events.get()); 340 element_animations_impl_->UpdateState(true, events.get());
358 EXPECT_EQ(1u, events->events_.size()); 341 EXPECT_EQ(1u, events->events_.size());
359 EXPECT_EQ(AnimationEvent::STARTED, events->events_[0].type); 342 EXPECT_EQ(AnimationEvent::STARTED, events->events_[0].type);
360 343
361 // The actual detachment happens here, inside the callback 344 // The actual detachment happens here, inside the callback
362 animations->NotifyAnimationStarted(events->events_[0]); 345 player2->NotifyAnimationStarted(events->events_[0]);
363 EXPECT_TRUE(delegate.started()); 346 EXPECT_TRUE(delegate.started());
364 } 347 }
365 348
366 // If an animation is started on the impl thread before it is ticked on the main 349 // If an animation is started on the impl thread before it is ticked on the main
367 // thread, we must be sure to respect the synchronized start time. 350 // thread, we must be sure to respect the synchronized start time.
368 TEST_F(ElementAnimationsTest, DoNotClobberStartTimes) { 351 TEST_F(ElementAnimationsTest, DoNotClobberStartTimes) {
369 CreateTestLayer(true, false); 352 CreateTestLayer(true, false);
370 AttachTimelinePlayerLayer(); 353 AttachTimelinePlayerLayer();
371 CreateImplTimelineAndPlayer(); 354 CreateImplTimelineAndPlayer();
372 355
373 scoped_refptr<ElementAnimations> animations = element_animations(); 356 EXPECT_FALSE(player_impl_->GetAnimation(TargetProperty::OPACITY));
374 scoped_refptr<ElementAnimations> animations_impl = element_animations_impl();
375
376 EXPECT_FALSE(animations_impl->GetAnimation(TargetProperty::OPACITY));
377 357
378 int animation_id = 358 int animation_id =
379 AddOpacityTransitionToElementAnimations(animations.get(), 1, 0, 1, false); 359 AddOpacityTransitionToPlayer(player_.get(), 1, 0, 1, false);
380 360
381 PushProperties(); 361 PushProperties();
382 animations_impl->ActivateAnimations(); 362 player_impl_->ActivateAnimations();
383 363
384 EXPECT_TRUE(animations_impl->GetAnimationById(animation_id)); 364 EXPECT_TRUE(player_impl_->GetAnimationById(animation_id));
385 EXPECT_EQ(Animation::WAITING_FOR_TARGET_AVAILABILITY, 365 EXPECT_EQ(Animation::WAITING_FOR_TARGET_AVAILABILITY,
386 animations_impl->GetAnimationById(animation_id)->run_state()); 366 player_impl_->GetAnimationById(animation_id)->run_state());
387 367
388 auto events = host_impl_->CreateEvents(); 368 auto events = host_impl_->CreateEvents();
389 animations_impl->Animate(kInitialTickTime); 369 element_animations_impl_->Animate(kInitialTickTime);
390 animations_impl->UpdateState(true, events.get()); 370 element_animations_impl_->UpdateState(true, events.get());
391 371
392 // Synchronize the start times. 372 // Synchronize the start times.
393 EXPECT_EQ(1u, events->events_.size()); 373 EXPECT_EQ(1u, events->events_.size());
394 animations->NotifyAnimationStarted(events->events_[0]); 374 player_->NotifyAnimationStarted(events->events_[0]);
395 EXPECT_EQ(animations->GetAnimationById(animation_id)->start_time(), 375 EXPECT_EQ(player_->GetAnimationById(animation_id)->start_time(),
396 animations_impl->GetAnimationById(animation_id)->start_time()); 376 player_impl_->GetAnimationById(animation_id)->start_time());
397 377
398 // Start the animation on the main thread. Should not affect the start time. 378 // Start the animation on the main thread. Should not affect the start time.
399 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(500)); 379 element_animations_->Animate(kInitialTickTime +
400 animations->UpdateState(true, nullptr); 380 TimeDelta::FromMilliseconds(500));
401 EXPECT_EQ(animations->GetAnimationById(animation_id)->start_time(), 381 element_animations_->UpdateState(true, nullptr);
402 animations_impl->GetAnimationById(animation_id)->start_time()); 382 EXPECT_EQ(player_->GetAnimationById(animation_id)->start_time(),
383 player_impl_->GetAnimationById(animation_id)->start_time());
403 } 384 }
404 385
405 TEST_F(ElementAnimationsTest, UseSpecifiedStartTimes) { 386 TEST_F(ElementAnimationsTest, UseSpecifiedStartTimes) {
406 CreateTestLayer(true, false); 387 CreateTestLayer(true, false);
407 AttachTimelinePlayerLayer(); 388 AttachTimelinePlayerLayer();
408 CreateImplTimelineAndPlayer(); 389 CreateImplTimelineAndPlayer();
409 390
410 scoped_refptr<ElementAnimations> animations = element_animations();
411 scoped_refptr<ElementAnimations> animations_impl = element_animations_impl();
412
413 int animation_id = 391 int animation_id =
414 AddOpacityTransitionToElementAnimations(animations.get(), 1, 0, 1, false); 392 AddOpacityTransitionToPlayer(player_.get(), 1, 0, 1, false);
415 393
416 const TimeTicks start_time = TicksFromSecondsF(123); 394 const TimeTicks start_time = TicksFromSecondsF(123);
417 animations->GetAnimation(TargetProperty::OPACITY)->set_start_time(start_time); 395 player_->GetAnimation(TargetProperty::OPACITY)->set_start_time(start_time);
418 396
419 PushProperties(); 397 PushProperties();
420 animations_impl->ActivateAnimations(); 398 player_impl_->ActivateAnimations();
421 399
422 EXPECT_TRUE(animations_impl->GetAnimationById(animation_id)); 400 EXPECT_TRUE(player_impl_->GetAnimationById(animation_id));
423 EXPECT_EQ(Animation::WAITING_FOR_TARGET_AVAILABILITY, 401 EXPECT_EQ(Animation::WAITING_FOR_TARGET_AVAILABILITY,
424 animations_impl->GetAnimationById(animation_id)->run_state()); 402 player_impl_->GetAnimationById(animation_id)->run_state());
425 403
426 auto events = host_impl_->CreateEvents(); 404 auto events = host_impl_->CreateEvents();
427 animations_impl->Animate(kInitialTickTime); 405 element_animations_impl_->Animate(kInitialTickTime);
428 animations_impl->UpdateState(true, events.get()); 406 element_animations_impl_->UpdateState(true, events.get());
429 407
430 // Synchronize the start times. 408 // Synchronize the start times.
431 EXPECT_EQ(1u, events->events_.size()); 409 EXPECT_EQ(1u, events->events_.size());
432 animations->NotifyAnimationStarted(events->events_[0]); 410 player_->NotifyAnimationStarted(events->events_[0]);
433 411
434 EXPECT_EQ(start_time, 412 EXPECT_EQ(start_time, player_->GetAnimationById(animation_id)->start_time());
435 animations->GetAnimationById(animation_id)->start_time()); 413 EXPECT_EQ(player_->GetAnimationById(animation_id)->start_time(),
436 EXPECT_EQ(animations->GetAnimationById(animation_id)->start_time(), 414 player_impl_->GetAnimationById(animation_id)->start_time());
437 animations_impl->GetAnimationById(animation_id)->start_time());
438 415
439 // Start the animation on the main thread. Should not affect the start time. 416 // Start the animation on the main thread. Should not affect the start time.
440 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(500)); 417 element_animations_->Animate(kInitialTickTime +
441 animations->UpdateState(true, nullptr); 418 TimeDelta::FromMilliseconds(500));
442 EXPECT_EQ(start_time, 419 element_animations_->UpdateState(true, nullptr);
443 animations->GetAnimationById(animation_id)->start_time()); 420 EXPECT_EQ(start_time, player_->GetAnimationById(animation_id)->start_time());
444 EXPECT_EQ(animations->GetAnimationById(animation_id)->start_time(), 421 EXPECT_EQ(player_->GetAnimationById(animation_id)->start_time(),
445 animations_impl->GetAnimationById(animation_id)->start_time()); 422 player_impl_->GetAnimationById(animation_id)->start_time());
446 } 423 }
447 424
448 // Tests that animationss activate and deactivate as expected. 425 // Tests that animationss activate and deactivate as expected.
449 TEST_F(ElementAnimationsTest, Activation) { 426 TEST_F(ElementAnimationsTest, Activation) {
450 CreateTestLayer(true, false); 427 CreateTestLayer(true, false);
451 AttachTimelinePlayerLayer(); 428 AttachTimelinePlayerLayer();
452 CreateImplTimelineAndPlayer(); 429 CreateImplTimelineAndPlayer();
453 430
454 scoped_refptr<ElementAnimations> animations = element_animations();
455 scoped_refptr<ElementAnimations> animations_impl = element_animations_impl();
456
457 AnimationHost* host = client_.host(); 431 AnimationHost* host = client_.host();
458 AnimationHost* host_impl = client_impl_.host(); 432 AnimationHost* host_impl = client_impl_.host();
459 433
460 auto events = host_impl_->CreateEvents(); 434 auto events = host_impl_->CreateEvents();
461 435
462 EXPECT_EQ(1u, host->all_element_animations_for_testing().size()); 436 EXPECT_EQ(1u, host->all_element_animations_for_testing().size());
463 EXPECT_EQ(1u, host_impl->all_element_animations_for_testing().size()); 437 EXPECT_EQ(1u, host_impl->all_element_animations_for_testing().size());
464 438
465 // Initially, both animationss should be inactive. 439 // Initially, both animationss should be inactive.
466 EXPECT_EQ(0u, host->active_element_animations_for_testing().size()); 440 EXPECT_EQ(0u, host->active_element_animations_for_testing().size());
467 EXPECT_EQ(0u, host_impl->active_element_animations_for_testing().size()); 441 EXPECT_EQ(0u, host_impl->active_element_animations_for_testing().size());
468 442
469 AddOpacityTransitionToElementAnimations(animations.get(), 1, 0, 1, false); 443 AddOpacityTransitionToPlayer(player_.get(), 1, 0, 1, false);
470 // The main thread animations should now be active. 444 // The main thread animations should now be active.
471 EXPECT_EQ(1u, host->active_element_animations_for_testing().size()); 445 EXPECT_EQ(1u, host->active_element_animations_for_testing().size());
472 446
473 PushProperties(); 447 PushProperties();
474 animations_impl->ActivateAnimations(); 448 player_impl_->ActivateAnimations();
475 // Both animationss should now be active. 449 // Both animationss should now be active.
476 EXPECT_EQ(1u, host->active_element_animations_for_testing().size()); 450 EXPECT_EQ(1u, host->active_element_animations_for_testing().size());
477 EXPECT_EQ(1u, host_impl->active_element_animations_for_testing().size()); 451 EXPECT_EQ(1u, host_impl->active_element_animations_for_testing().size());
478 452
479 animations_impl->Animate(kInitialTickTime); 453 element_animations_impl_->Animate(kInitialTickTime);
480 animations_impl->UpdateState(true, events.get()); 454 element_animations_impl_->UpdateState(true, events.get());
481 EXPECT_EQ(1u, events->events_.size()); 455 EXPECT_EQ(1u, events->events_.size());
482 animations->NotifyAnimationStarted(events->events_[0]); 456 player_->NotifyAnimationStarted(events->events_[0]);
483 457
484 EXPECT_EQ(1u, host->active_element_animations_for_testing().size()); 458 EXPECT_EQ(1u, host->active_element_animations_for_testing().size());
485 EXPECT_EQ(1u, host_impl->active_element_animations_for_testing().size()); 459 EXPECT_EQ(1u, host_impl->active_element_animations_for_testing().size());
486 460
487 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(500)); 461 element_animations_->Animate(kInitialTickTime +
488 animations->UpdateState(true, nullptr); 462 TimeDelta::FromMilliseconds(500));
463 element_animations_->UpdateState(true, nullptr);
489 EXPECT_EQ(1u, host->active_element_animations_for_testing().size()); 464 EXPECT_EQ(1u, host->active_element_animations_for_testing().size());
490 465
491 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1000)); 466 element_animations_->Animate(kInitialTickTime +
492 animations->UpdateState(true, nullptr); 467 TimeDelta::FromMilliseconds(1000));
468 element_animations_->UpdateState(true, nullptr);
493 EXPECT_EQ(Animation::FINISHED, 469 EXPECT_EQ(Animation::FINISHED,
494 animations->GetAnimation(TargetProperty::OPACITY)->run_state()); 470 player_->GetAnimation(TargetProperty::OPACITY)->run_state());
495 EXPECT_EQ(1u, host->active_element_animations_for_testing().size()); 471 EXPECT_EQ(1u, host->active_element_animations_for_testing().size());
496 472
497 events = host_impl_->CreateEvents(); 473 events = host_impl_->CreateEvents();
498 474
499 animations_impl->Animate(kInitialTickTime + 475 element_animations_impl_->Animate(kInitialTickTime +
500 TimeDelta::FromMilliseconds(1500)); 476 TimeDelta::FromMilliseconds(1500));
501 animations_impl->UpdateState(true, events.get()); 477 element_animations_impl_->UpdateState(true, events.get());
502 478
503 EXPECT_EQ( 479 EXPECT_EQ(Animation::WAITING_FOR_DELETION,
504 Animation::WAITING_FOR_DELETION, 480 player_impl_->GetAnimation(TargetProperty::OPACITY)->run_state());
505 animations_impl->GetAnimation(TargetProperty::OPACITY)->run_state());
506 // The impl thread animations should have de-activated. 481 // The impl thread animations should have de-activated.
507 EXPECT_EQ(0u, host_impl->active_element_animations_for_testing().size()); 482 EXPECT_EQ(0u, host_impl->active_element_animations_for_testing().size());
508 483
509 EXPECT_EQ(1u, events->events_.size()); 484 EXPECT_EQ(1u, events->events_.size());
510 animations->NotifyAnimationFinished(events->events_[0]); 485 player_->NotifyAnimationFinished(events->events_[0]);
511 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1500)); 486 element_animations_->Animate(kInitialTickTime +
512 animations->UpdateState(true, nullptr); 487 TimeDelta::FromMilliseconds(1500));
488 element_animations_->UpdateState(true, nullptr);
513 489
514 EXPECT_EQ(Animation::WAITING_FOR_DELETION, 490 EXPECT_EQ(Animation::WAITING_FOR_DELETION,
515 animations->GetAnimation(TargetProperty::OPACITY)->run_state()); 491 player_->GetAnimation(TargetProperty::OPACITY)->run_state());
516 // The main thread animations should have de-activated. 492 // The main thread animations should have de-activated.
517 EXPECT_EQ(0u, host->active_element_animations_for_testing().size()); 493 EXPECT_EQ(0u, host->active_element_animations_for_testing().size());
518 494
519 PushProperties(); 495 PushProperties();
520 animations_impl->ActivateAnimations(); 496 player_impl_->ActivateAnimations();
521 EXPECT_FALSE(animations->HasAnyAnimation()); 497 EXPECT_FALSE(player_->has_any_animation());
522 EXPECT_FALSE(animations_impl->HasAnyAnimation()); 498 EXPECT_FALSE(player_impl_->has_any_animation());
523 EXPECT_EQ(0u, host->active_element_animations_for_testing().size()); 499 EXPECT_EQ(0u, host->active_element_animations_for_testing().size());
524 EXPECT_EQ(0u, host_impl->active_element_animations_for_testing().size()); 500 EXPECT_EQ(0u, host_impl->active_element_animations_for_testing().size());
525 } 501 }
526 502
527 TEST_F(ElementAnimationsTest, SyncPause) { 503 TEST_F(ElementAnimationsTest, SyncPause) {
528 CreateTestLayer(true, false); 504 CreateTestLayer(true, false);
529 AttachTimelinePlayerLayer(); 505 AttachTimelinePlayerLayer();
530 CreateImplTimelineAndPlayer(); 506 CreateImplTimelineAndPlayer();
531 507
532 scoped_refptr<ElementAnimations> animations = element_animations(); 508 EXPECT_FALSE(player_impl_->GetAnimation(TargetProperty::OPACITY));
533 scoped_refptr<ElementAnimations> animations_impl = element_animations_impl();
534
535 EXPECT_FALSE(animations_impl->GetAnimation(TargetProperty::OPACITY));
536 509
537 // Two steps, three ranges: [0-1) -> 0.2, [1-2) -> 0.3, [2-3] -> 0.4. 510 // Two steps, three ranges: [0-1) -> 0.2, [1-2) -> 0.3, [2-3] -> 0.4.
538 const double duration = 3.0; 511 const double duration = 3.0;
539 const int animation_id = AddOpacityStepsToElementAnimations( 512 const int animation_id =
540 animations.get(), duration, 0.2f, 0.4f, 2); 513 AddOpacityStepsToPlayer(player_.get(), duration, 0.2f, 0.4f, 2);
541 514
542 // Set start offset to be at the beginning of the second range. 515 // Set start offset to be at the beginning of the second range.
543 animations->GetAnimationById(animation_id) 516 player_->GetAnimationById(animation_id)
544 ->set_time_offset(TimeDelta::FromSecondsD(1.01)); 517 ->set_time_offset(TimeDelta::FromSecondsD(1.01));
545 518
546 PushProperties(); 519 PushProperties();
547 animations_impl->ActivateAnimations(); 520 player_impl_->ActivateAnimations();
548 521
549 EXPECT_TRUE(animations_impl->GetAnimationById(animation_id)); 522 EXPECT_TRUE(player_impl_->GetAnimationById(animation_id));
550 EXPECT_EQ(Animation::WAITING_FOR_TARGET_AVAILABILITY, 523 EXPECT_EQ(Animation::WAITING_FOR_TARGET_AVAILABILITY,
551 animations_impl->GetAnimationById(animation_id)->run_state()); 524 player_impl_->GetAnimationById(animation_id)->run_state());
552 525
553 TimeTicks time = kInitialTickTime; 526 TimeTicks time = kInitialTickTime;
554 527
555 // Start the animations on each animations. 528 // Start the animations on each animations.
556 auto events = host_impl_->CreateEvents(); 529 auto events = host_impl_->CreateEvents();
557 animations_impl->Animate(time); 530 element_animations_impl_->Animate(time);
558 animations_impl->UpdateState(true, events.get()); 531 element_animations_impl_->UpdateState(true, events.get());
559 EXPECT_EQ(1u, events->events_.size()); 532 EXPECT_EQ(1u, events->events_.size());
560 533
561 animations->Animate(time); 534 element_animations_->Animate(time);
562 animations->UpdateState(true, nullptr); 535 element_animations_->UpdateState(true, nullptr);
563 animations->NotifyAnimationStarted(events->events_[0]); 536 player_->NotifyAnimationStarted(events->events_[0]);
564 537
565 EXPECT_EQ(Animation::RUNNING, 538 EXPECT_EQ(Animation::RUNNING,
566 animations_impl->GetAnimationById(animation_id)->run_state()); 539 player_impl_->GetAnimationById(animation_id)->run_state());
567 EXPECT_EQ(Animation::RUNNING, 540 EXPECT_EQ(Animation::RUNNING,
568 animations->GetAnimationById(animation_id)->run_state()); 541 player_->GetAnimationById(animation_id)->run_state());
569 542
570 EXPECT_EQ(0.3f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 543 EXPECT_EQ(0.3f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
571 EXPECT_EQ(0.3f, 544 EXPECT_EQ(0.3f,
572 client_impl_.GetOpacity(element_id_, ElementListType::ACTIVE)); 545 client_impl_.GetOpacity(element_id_, ElementListType::ACTIVE));
573 546
574 EXPECT_EQ(kInitialTickTime, 547 EXPECT_EQ(kInitialTickTime,
575 animations->GetAnimationById(animation_id)->start_time()); 548 player_->GetAnimationById(animation_id)->start_time());
576 EXPECT_EQ(kInitialTickTime, 549 EXPECT_EQ(kInitialTickTime,
577 animations_impl->GetAnimationById(animation_id)->start_time()); 550 player_impl_->GetAnimationById(animation_id)->start_time());
578 551
579 // Pause the animation at the middle of the second range so the offset 552 // Pause the animation at the middle of the second range so the offset
580 // delays animation until the middle of the third range. 553 // delays animation until the middle of the third range.
581 animations->PauseAnimation(animation_id, TimeDelta::FromSecondsD(1.5)); 554 player_->PauseAnimation(animation_id, 1.5);
582 EXPECT_EQ(Animation::PAUSED, 555 EXPECT_EQ(Animation::PAUSED,
583 animations->GetAnimationById(animation_id)->run_state()); 556 player_->GetAnimationById(animation_id)->run_state());
584 557
585 // The pause run state change should make it to the impl thread animations. 558 // The pause run state change should make it to the impl thread animations.
586 PushProperties(); 559 PushProperties();
587 animations_impl->ActivateAnimations(); 560 player_impl_->ActivateAnimations();
588 561
589 // Advance time so it stays within the first range. 562 // Advance time so it stays within the first range.
590 time += TimeDelta::FromMilliseconds(10); 563 time += TimeDelta::FromMilliseconds(10);
591 animations->Animate(time); 564 element_animations_->Animate(time);
592 animations_impl->Animate(time); 565 element_animations_impl_->Animate(time);
593 566
594 EXPECT_EQ(Animation::PAUSED, 567 EXPECT_EQ(Animation::PAUSED,
595 animations_impl->GetAnimationById(animation_id)->run_state()); 568 player_impl_->GetAnimationById(animation_id)->run_state());
596 569
597 // Opacity value doesn't depend on time if paused at specified time offset. 570 // Opacity value doesn't depend on time if paused at specified time offset.
598 EXPECT_EQ(0.4f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 571 EXPECT_EQ(0.4f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
599 EXPECT_EQ(0.4f, 572 EXPECT_EQ(0.4f,
600 client_impl_.GetOpacity(element_id_, ElementListType::ACTIVE)); 573 client_impl_.GetOpacity(element_id_, ElementListType::ACTIVE));
601 } 574 }
602 575
603 TEST_F(ElementAnimationsTest, DoNotSyncFinishedAnimation) { 576 TEST_F(ElementAnimationsTest, DoNotSyncFinishedAnimation) {
604 CreateTestLayer(true, false); 577 CreateTestLayer(true, false);
605 AttachTimelinePlayerLayer(); 578 AttachTimelinePlayerLayer();
606 CreateImplTimelineAndPlayer(); 579 CreateImplTimelineAndPlayer();
607 580
608 scoped_refptr<ElementAnimations> animations = element_animations();
609 scoped_refptr<ElementAnimations> animations_impl = element_animations_impl();
610
611 auto events = host_impl_->CreateEvents(); 581 auto events = host_impl_->CreateEvents();
612 582
613 EXPECT_FALSE(animations_impl->GetAnimation(TargetProperty::OPACITY)); 583 EXPECT_FALSE(player_impl_->GetAnimation(TargetProperty::OPACITY));
614 584
615 int animation_id = 585 int animation_id =
616 AddOpacityTransitionToElementAnimations(animations.get(), 1, 0, 1, false); 586 AddOpacityTransitionToPlayer(player_.get(), 1, 0, 1, false);
617 587
618 PushProperties(); 588 PushProperties();
619 animations_impl->ActivateAnimations(); 589 player_impl_->ActivateAnimations();
620 590
621 EXPECT_TRUE(animations_impl->GetAnimationById(animation_id)); 591 EXPECT_TRUE(player_impl_->GetAnimationById(animation_id));
622 EXPECT_EQ(Animation::WAITING_FOR_TARGET_AVAILABILITY, 592 EXPECT_EQ(Animation::WAITING_FOR_TARGET_AVAILABILITY,
623 animations_impl->GetAnimationById(animation_id)->run_state()); 593 player_impl_->GetAnimationById(animation_id)->run_state());
624 594
625 events = host_impl_->CreateEvents(); 595 events = host_impl_->CreateEvents();
626 animations_impl->Animate(kInitialTickTime); 596 element_animations_impl_->Animate(kInitialTickTime);
627 animations_impl->UpdateState(true, events.get()); 597 element_animations_impl_->UpdateState(true, events.get());
628 EXPECT_EQ(1u, events->events_.size()); 598 EXPECT_EQ(1u, events->events_.size());
629 EXPECT_EQ(AnimationEvent::STARTED, events->events_[0].type); 599 EXPECT_EQ(AnimationEvent::STARTED, events->events_[0].type);
630 600
631 // Notify main thread animations that the animation has started. 601 // Notify main thread animations that the animation has started.
632 animations->NotifyAnimationStarted(events->events_[0]); 602 player_->NotifyAnimationStarted(events->events_[0]);
633 603
634 // Complete animation on impl thread. 604 // Complete animation on impl thread.
635 events = host_impl_->CreateEvents(); 605 events = host_impl_->CreateEvents();
636 animations_impl->Animate(kInitialTickTime + TimeDelta::FromSeconds(1)); 606 element_animations_impl_->Animate(kInitialTickTime +
637 animations_impl->UpdateState(true, events.get()); 607 TimeDelta::FromSeconds(1));
608 element_animations_impl_->UpdateState(true, events.get());
638 EXPECT_EQ(1u, events->events_.size()); 609 EXPECT_EQ(1u, events->events_.size());
639 EXPECT_EQ(AnimationEvent::FINISHED, events->events_[0].type); 610 EXPECT_EQ(AnimationEvent::FINISHED, events->events_[0].type);
640 611
641 animations->NotifyAnimationFinished(events->events_[0]); 612 player_->NotifyAnimationFinished(events->events_[0]);
642 613
643 animations->Animate(kInitialTickTime + TimeDelta::FromSeconds(2)); 614 element_animations_->Animate(kInitialTickTime + TimeDelta::FromSeconds(2));
644 animations->UpdateState(true, nullptr); 615 element_animations_->UpdateState(true, nullptr);
645 616
646 PushProperties(); 617 PushProperties();
647 animations_impl->ActivateAnimations(); 618 player_impl_->ActivateAnimations();
648 EXPECT_FALSE(animations->GetAnimationById(animation_id)); 619 EXPECT_FALSE(player_->GetAnimationById(animation_id));
649 EXPECT_FALSE(animations_impl->GetAnimationById(animation_id)); 620 EXPECT_FALSE(player_impl_->GetAnimationById(animation_id));
650 } 621 }
651 622
652 // Ensure that a finished animation is eventually deleted by both the 623 // Ensure that a finished animation is eventually deleted by both the
653 // main-thread and the impl-thread animationss. 624 // main-thread and the impl-thread animationss.
654 TEST_F(ElementAnimationsTest, AnimationsAreDeleted) { 625 TEST_F(ElementAnimationsTest, AnimationsAreDeleted) {
655 CreateTestLayer(true, false); 626 CreateTestLayer(true, false);
656 AttachTimelinePlayerLayer(); 627 AttachTimelinePlayerLayer();
657 CreateImplTimelineAndPlayer(); 628 CreateImplTimelineAndPlayer();
658 629
659 scoped_refptr<ElementAnimations> animations = element_animations();
660 scoped_refptr<ElementAnimations> animations_impl = element_animations_impl();
661
662 auto events = host_impl_->CreateEvents(); 630 auto events = host_impl_->CreateEvents();
663 631
664 AddOpacityTransitionToElementAnimations(animations.get(), 1.0, 0.0f, 1.0f, 632 AddOpacityTransitionToPlayer(player_.get(), 1.0, 0.0f, 1.0f, false);
665 false); 633 element_animations_->Animate(kInitialTickTime);
666 animations->Animate(kInitialTickTime); 634 element_animations_->UpdateState(true, nullptr);
667 animations->UpdateState(true, nullptr); 635 EXPECT_TRUE(player_->needs_push_properties());
668 EXPECT_TRUE(animations->needs_push_properties());
669 636
670 PushProperties(); 637 PushProperties();
671 EXPECT_FALSE(animations->needs_push_properties()); 638 EXPECT_FALSE(player_->needs_push_properties());
672 639
673 EXPECT_FALSE(host_->needs_push_properties()); 640 EXPECT_FALSE(host_->needs_push_properties());
674 EXPECT_FALSE(host_impl_->needs_push_properties()); 641 EXPECT_FALSE(host_impl_->needs_push_properties());
675 642
676 animations_impl->ActivateAnimations(); 643 player_impl_->ActivateAnimations();
677 644
678 animations_impl->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(500)); 645 element_animations_impl_->Animate(kInitialTickTime +
679 animations_impl->UpdateState(true, events.get()); 646 TimeDelta::FromMilliseconds(500));
647 element_animations_impl_->UpdateState(true, events.get());
680 648
681 // There should be a STARTED event for the animation. 649 // There should be a STARTED event for the animation.
682 EXPECT_EQ(1u, events->events_.size()); 650 EXPECT_EQ(1u, events->events_.size());
683 EXPECT_EQ(AnimationEvent::STARTED, events->events_[0].type); 651 EXPECT_EQ(AnimationEvent::STARTED, events->events_[0].type);
684 animations->NotifyAnimationStarted(events->events_[0]); 652 player_->NotifyAnimationStarted(events->events_[0]);
685 653
686 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1000)); 654 element_animations_->Animate(kInitialTickTime +
687 animations->UpdateState(true, nullptr); 655 TimeDelta::FromMilliseconds(1000));
656 element_animations_->UpdateState(true, nullptr);
688 657
689 EXPECT_FALSE(host_->needs_push_properties()); 658 EXPECT_FALSE(host_->needs_push_properties());
690 EXPECT_FALSE(host_impl_->needs_push_properties()); 659 EXPECT_FALSE(host_impl_->needs_push_properties());
691 660
692 events = host_impl_->CreateEvents(); 661 events = host_impl_->CreateEvents();
693 animations_impl->Animate(kInitialTickTime + 662 element_animations_impl_->Animate(kInitialTickTime +
694 TimeDelta::FromMilliseconds(2000)); 663 TimeDelta::FromMilliseconds(2000));
695 animations_impl->UpdateState(true, events.get()); 664 element_animations_impl_->UpdateState(true, events.get());
696 665
697 EXPECT_TRUE(host_impl_->needs_push_properties()); 666 EXPECT_TRUE(host_impl_->needs_push_properties());
698 667
699 // There should be a FINISHED event for the animation. 668 // There should be a FINISHED event for the animation.
700 EXPECT_EQ(1u, events->events_.size()); 669 EXPECT_EQ(1u, events->events_.size());
701 EXPECT_EQ(AnimationEvent::FINISHED, events->events_[0].type); 670 EXPECT_EQ(AnimationEvent::FINISHED, events->events_[0].type);
702 671
703 // Neither animations should have deleted the animation yet. 672 // Neither animations should have deleted the animation yet.
704 EXPECT_TRUE(animations->GetAnimation(TargetProperty::OPACITY)); 673 EXPECT_TRUE(player_->GetAnimation(TargetProperty::OPACITY));
705 EXPECT_TRUE(animations_impl->GetAnimation(TargetProperty::OPACITY)); 674 EXPECT_TRUE(player_impl_->GetAnimation(TargetProperty::OPACITY));
706 675
707 animations->NotifyAnimationFinished(events->events_[0]); 676 player_->NotifyAnimationFinished(events->events_[0]);
708 677
709 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(3000)); 678 element_animations_->Animate(kInitialTickTime +
710 animations->UpdateState(true, nullptr); 679 TimeDelta::FromMilliseconds(3000));
680 element_animations_->UpdateState(true, nullptr);
711 EXPECT_TRUE(host_->needs_push_properties()); 681 EXPECT_TRUE(host_->needs_push_properties());
712 682
713 PushProperties(); 683 PushProperties();
714 684
715 // Both animationss should now have deleted the animation. The impl animations 685 // Both animationss should now have deleted the animation. The impl animations
716 // should have deleted the animation even though activation has not occurred, 686 // should have deleted the animation even though activation has not occurred,
717 // since the animation was already waiting for deletion when 687 // since the animation was already waiting for deletion when
718 // PushPropertiesTo was called. 688 // PushPropertiesTo was called.
719 EXPECT_FALSE(animations->HasAnyAnimation()); 689 EXPECT_FALSE(player_->has_any_animation());
720 EXPECT_FALSE(animations_impl->HasAnyAnimation()); 690 EXPECT_FALSE(player_impl_->has_any_animation());
721 } 691 }
722 692
723 // Tests that transitioning opacity from 0 to 1 works as expected. 693 // Tests that transitioning opacity from 0 to 1 works as expected.
724 694
725 static std::unique_ptr<Animation> CreateAnimation( 695 static std::unique_ptr<Animation> CreateAnimation(
726 std::unique_ptr<AnimationCurve> curve, 696 std::unique_ptr<AnimationCurve> curve,
727 int group_id, 697 int group_id,
728 TargetProperty::Type property) { 698 TargetProperty::Type property) {
729 return Animation::Create(std::move(curve), 0, group_id, property); 699 return Animation::Create(std::move(curve), 0, group_id, property);
730 } 700 }
731 701
732 static const AnimationEvent* GetMostRecentPropertyUpdateEvent( 702 static const AnimationEvent* GetMostRecentPropertyUpdateEvent(
733 const AnimationEvents* events) { 703 const AnimationEvents* events) {
734 const AnimationEvent* event = 0; 704 const AnimationEvent* event = 0;
735 for (size_t i = 0; i < events->events_.size(); ++i) 705 for (size_t i = 0; i < events->events_.size(); ++i)
736 if (events->events_[i].type == AnimationEvent::PROPERTY_UPDATE) 706 if (events->events_[i].type == AnimationEvent::PROPERTY_UPDATE)
737 event = &events->events_[i]; 707 event = &events->events_[i];
738 708
739 return event; 709 return event;
740 } 710 }
741 711
742 TEST_F(ElementAnimationsTest, TrivialTransition) { 712 TEST_F(ElementAnimationsTest, TrivialTransition) {
743 CreateTestLayer(true, false); 713 CreateTestLayer(true, false);
744 AttachTimelinePlayerLayer(); 714 AttachTimelinePlayerLayer();
745 715
746 scoped_refptr<ElementAnimations> animations = element_animations();
747
748 auto events = host_impl_->CreateEvents(); 716 auto events = host_impl_->CreateEvents();
749 717
750 std::unique_ptr<Animation> to_add(CreateAnimation( 718 std::unique_ptr<Animation> to_add(CreateAnimation(
751 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)), 719 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)),
752 1, TargetProperty::OPACITY)); 720 1, TargetProperty::OPACITY));
753 721
754 EXPECT_FALSE(animations->needs_to_start_animations_for_testing()); 722 EXPECT_FALSE(player_->needs_to_start_animations());
755 animations->AddAnimation(std::move(to_add)); 723 player_->AddAnimation(std::move(to_add));
756 EXPECT_TRUE(animations->needs_to_start_animations_for_testing()); 724 EXPECT_TRUE(player_->needs_to_start_animations());
757 animations->Animate(kInitialTickTime); 725 element_animations_->Animate(kInitialTickTime);
758 EXPECT_FALSE(animations->needs_to_start_animations_for_testing()); 726 EXPECT_FALSE(player_->needs_to_start_animations());
759 animations->UpdateState(true, events.get()); 727 element_animations_->UpdateState(true, events.get());
760 EXPECT_TRUE(animations->HasActiveAnimation()); 728 EXPECT_TRUE(player_->HasActiveAnimation());
761 EXPECT_EQ(0.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 729 EXPECT_EQ(0.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
762 // A non-impl-only animation should not generate property updates. 730 // A non-impl-only animation should not generate property updates.
763 const AnimationEvent* event = GetMostRecentPropertyUpdateEvent(events.get()); 731 const AnimationEvent* event = GetMostRecentPropertyUpdateEvent(events.get());
764 EXPECT_FALSE(event); 732 EXPECT_FALSE(event);
765 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1000)); 733 element_animations_->Animate(kInitialTickTime +
766 animations->UpdateState(true, events.get()); 734 TimeDelta::FromMilliseconds(1000));
735 element_animations_->UpdateState(true, events.get());
767 EXPECT_EQ(1.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 736 EXPECT_EQ(1.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
768 EXPECT_FALSE(animations->HasActiveAnimation()); 737 EXPECT_FALSE(player_->HasActiveAnimation());
769 event = GetMostRecentPropertyUpdateEvent(events.get()); 738 event = GetMostRecentPropertyUpdateEvent(events.get());
770 EXPECT_FALSE(event); 739 EXPECT_FALSE(event);
771 } 740 }
772 741
773 TEST_F(ElementAnimationsTest, FilterTransition) { 742 TEST_F(ElementAnimationsTest, FilterTransition) {
774 CreateTestLayer(true, false); 743 CreateTestLayer(true, false);
775 AttachTimelinePlayerLayer(); 744 AttachTimelinePlayerLayer();
776 745
777 scoped_refptr<ElementAnimations> animations = element_animations();
778
779 auto events = host_impl_->CreateEvents(); 746 auto events = host_impl_->CreateEvents();
780 747
781 std::unique_ptr<KeyframedFilterAnimationCurve> curve( 748 std::unique_ptr<KeyframedFilterAnimationCurve> curve(
782 KeyframedFilterAnimationCurve::Create()); 749 KeyframedFilterAnimationCurve::Create());
783 750
784 FilterOperations start_filters; 751 FilterOperations start_filters;
785 start_filters.Append(FilterOperation::CreateBrightnessFilter(1.f)); 752 start_filters.Append(FilterOperation::CreateBrightnessFilter(1.f));
786 curve->AddKeyframe( 753 curve->AddKeyframe(
787 FilterKeyframe::Create(base::TimeDelta(), start_filters, nullptr)); 754 FilterKeyframe::Create(base::TimeDelta(), start_filters, nullptr));
788 FilterOperations end_filters; 755 FilterOperations end_filters;
789 end_filters.Append(FilterOperation::CreateBrightnessFilter(2.f)); 756 end_filters.Append(FilterOperation::CreateBrightnessFilter(2.f));
790 curve->AddKeyframe(FilterKeyframe::Create(base::TimeDelta::FromSecondsD(1.0), 757 curve->AddKeyframe(FilterKeyframe::Create(base::TimeDelta::FromSecondsD(1.0),
791 end_filters, nullptr)); 758 end_filters, nullptr));
792 759
793 std::unique_ptr<Animation> animation( 760 std::unique_ptr<Animation> animation(
794 Animation::Create(std::move(curve), 1, 0, TargetProperty::FILTER)); 761 Animation::Create(std::move(curve), 1, 0, TargetProperty::FILTER));
795 animations->AddAnimation(std::move(animation)); 762 player_->AddAnimation(std::move(animation));
796 763
797 animations->Animate(kInitialTickTime); 764 element_animations_->Animate(kInitialTickTime);
798 animations->UpdateState(true, events.get()); 765 element_animations_->UpdateState(true, events.get());
799 EXPECT_TRUE(animations->HasActiveAnimation()); 766 EXPECT_TRUE(player_->HasActiveAnimation());
800 EXPECT_EQ(start_filters, 767 EXPECT_EQ(start_filters,
801 client_.GetFilters(element_id_, ElementListType::ACTIVE)); 768 client_.GetFilters(element_id_, ElementListType::ACTIVE));
802 // A non-impl-only animation should not generate property updates. 769 // A non-impl-only animation should not generate property updates.
803 const AnimationEvent* event = GetMostRecentPropertyUpdateEvent(events.get()); 770 const AnimationEvent* event = GetMostRecentPropertyUpdateEvent(events.get());
804 EXPECT_FALSE(event); 771 EXPECT_FALSE(event);
805 772
806 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(500)); 773 element_animations_->Animate(kInitialTickTime +
807 animations->UpdateState(true, events.get()); 774 TimeDelta::FromMilliseconds(500));
775 element_animations_->UpdateState(true, events.get());
808 EXPECT_EQ(1u, 776 EXPECT_EQ(1u,
809 client_.GetFilters(element_id_, ElementListType::ACTIVE).size()); 777 client_.GetFilters(element_id_, ElementListType::ACTIVE).size());
810 EXPECT_EQ(FilterOperation::CreateBrightnessFilter(1.5f), 778 EXPECT_EQ(FilterOperation::CreateBrightnessFilter(1.5f),
811 client_.GetFilters(element_id_, ElementListType::ACTIVE).at(0)); 779 client_.GetFilters(element_id_, ElementListType::ACTIVE).at(0));
812 event = GetMostRecentPropertyUpdateEvent(events.get()); 780 event = GetMostRecentPropertyUpdateEvent(events.get());
813 EXPECT_FALSE(event); 781 EXPECT_FALSE(event);
814 782
815 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1000)); 783 element_animations_->Animate(kInitialTickTime +
816 animations->UpdateState(true, events.get()); 784 TimeDelta::FromMilliseconds(1000));
785 element_animations_->UpdateState(true, events.get());
817 EXPECT_EQ(end_filters, 786 EXPECT_EQ(end_filters,
818 client_.GetFilters(element_id_, ElementListType::ACTIVE)); 787 client_.GetFilters(element_id_, ElementListType::ACTIVE));
819 EXPECT_FALSE(animations->HasActiveAnimation()); 788 EXPECT_FALSE(player_->HasActiveAnimation());
820 event = GetMostRecentPropertyUpdateEvent(events.get()); 789 event = GetMostRecentPropertyUpdateEvent(events.get());
821 EXPECT_FALSE(event); 790 EXPECT_FALSE(event);
822 } 791 }
823 792
824 TEST_F(ElementAnimationsTest, ScrollOffsetTransition) { 793 TEST_F(ElementAnimationsTest, ScrollOffsetTransition) {
825 CreateTestLayer(true, false); 794 CreateTestLayer(true, false);
826 AttachTimelinePlayerLayer(); 795 AttachTimelinePlayerLayer();
827 CreateImplTimelineAndPlayer(); 796 CreateImplTimelineAndPlayer();
828 797
829 scoped_refptr<ElementAnimations> animations = element_animations();
830 scoped_refptr<ElementAnimations> animations_impl = element_animations_impl();
831
832 auto events = host_impl_->CreateEvents(); 798 auto events = host_impl_->CreateEvents();
833 799
834 gfx::ScrollOffset initial_value(100.f, 300.f); 800 gfx::ScrollOffset initial_value(100.f, 300.f);
835 gfx::ScrollOffset target_value(300.f, 200.f); 801 gfx::ScrollOffset target_value(300.f, 200.f);
836 std::unique_ptr<ScrollOffsetAnimationCurve> curve( 802 std::unique_ptr<ScrollOffsetAnimationCurve> curve(
837 ScrollOffsetAnimationCurve::Create( 803 ScrollOffsetAnimationCurve::Create(
838 target_value, CubicBezierTimingFunction::CreatePreset( 804 target_value, CubicBezierTimingFunction::CreatePreset(
839 CubicBezierTimingFunction::EaseType::EASE_IN_OUT))); 805 CubicBezierTimingFunction::EaseType::EASE_IN_OUT)));
840 806
841 std::unique_ptr<Animation> animation( 807 std::unique_ptr<Animation> animation(
842 Animation::Create(std::move(curve), 1, 0, TargetProperty::SCROLL_OFFSET)); 808 Animation::Create(std::move(curve), 1, 0, TargetProperty::SCROLL_OFFSET));
843 animation->set_needs_synchronized_start_time(true); 809 animation->set_needs_synchronized_start_time(true);
844 animations->AddAnimation(std::move(animation)); 810 player_->AddAnimation(std::move(animation));
845 811
846 client_impl_.SetScrollOffsetForAnimation(initial_value); 812 client_impl_.SetScrollOffsetForAnimation(initial_value);
847 PushProperties(); 813 PushProperties();
848 animations_impl->ActivateAnimations(); 814 player_impl_->ActivateAnimations();
849 EXPECT_TRUE(animations_impl->GetAnimation(TargetProperty::SCROLL_OFFSET)); 815 EXPECT_TRUE(player_impl_->GetAnimation(TargetProperty::SCROLL_OFFSET));
850 TimeDelta duration = 816 TimeDelta duration = player_impl_->GetAnimation(TargetProperty::SCROLL_OFFSET)
851 animations_impl->GetAnimation(TargetProperty::SCROLL_OFFSET) 817 ->curve()
852 ->curve() 818 ->Duration();
853 ->Duration(); 819 EXPECT_EQ(duration, player_->GetAnimation(TargetProperty::SCROLL_OFFSET)
854 EXPECT_EQ(duration, animations->GetAnimation(TargetProperty::SCROLL_OFFSET)
855 ->curve() 820 ->curve()
856 ->Duration()); 821 ->Duration());
857 822
858 animations->Animate(kInitialTickTime); 823 element_animations_->Animate(kInitialTickTime);
859 animations->UpdateState(true, nullptr); 824 element_animations_->UpdateState(true, nullptr);
860 EXPECT_TRUE(animations->HasActiveAnimation()); 825 EXPECT_TRUE(player_->HasActiveAnimation());
861 EXPECT_EQ(initial_value, 826 EXPECT_EQ(initial_value,
862 client_.GetScrollOffset(element_id_, ElementListType::ACTIVE)); 827 client_.GetScrollOffset(element_id_, ElementListType::ACTIVE));
863 828
864 animations_impl->Animate(kInitialTickTime); 829 element_animations_impl_->Animate(kInitialTickTime);
865 animations_impl->UpdateState(true, events.get()); 830 element_animations_impl_->UpdateState(true, events.get());
866 EXPECT_TRUE(animations_impl->HasActiveAnimation()); 831 EXPECT_TRUE(player_impl_->HasActiveAnimation());
867 EXPECT_EQ(initial_value, 832 EXPECT_EQ(initial_value,
868 client_impl_.GetScrollOffset(element_id_, ElementListType::ACTIVE)); 833 client_impl_.GetScrollOffset(element_id_, ElementListType::ACTIVE));
869 // Scroll offset animations should not generate property updates. 834 // Scroll offset animations should not generate property updates.
870 const AnimationEvent* event = GetMostRecentPropertyUpdateEvent(events.get()); 835 const AnimationEvent* event = GetMostRecentPropertyUpdateEvent(events.get());
871 EXPECT_FALSE(event); 836 EXPECT_FALSE(event);
872 837
873 animations->NotifyAnimationStarted(events->events_[0]); 838 player_->NotifyAnimationStarted(events->events_[0]);
874 animations->Animate(kInitialTickTime + duration / 2); 839 element_animations_->Animate(kInitialTickTime + duration / 2);
875 animations->UpdateState(true, nullptr); 840 element_animations_->UpdateState(true, nullptr);
876 EXPECT_TRUE(animations->HasActiveAnimation()); 841 EXPECT_TRUE(player_->HasActiveAnimation());
877 EXPECT_VECTOR2DF_EQ( 842 EXPECT_VECTOR2DF_EQ(
878 gfx::Vector2dF(200.f, 250.f), 843 gfx::Vector2dF(200.f, 250.f),
879 client_.GetScrollOffset(element_id_, ElementListType::ACTIVE)); 844 client_.GetScrollOffset(element_id_, ElementListType::ACTIVE));
880 845
881 animations_impl->Animate(kInitialTickTime + duration / 2); 846 element_animations_impl_->Animate(kInitialTickTime + duration / 2);
882 animations_impl->UpdateState(true, events.get()); 847 element_animations_impl_->UpdateState(true, events.get());
883 EXPECT_VECTOR2DF_EQ( 848 EXPECT_VECTOR2DF_EQ(
884 gfx::Vector2dF(200.f, 250.f), 849 gfx::Vector2dF(200.f, 250.f),
885 client_impl_.GetScrollOffset(element_id_, ElementListType::ACTIVE)); 850 client_impl_.GetScrollOffset(element_id_, ElementListType::ACTIVE));
886 event = GetMostRecentPropertyUpdateEvent(events.get()); 851 event = GetMostRecentPropertyUpdateEvent(events.get());
887 EXPECT_FALSE(event); 852 EXPECT_FALSE(event);
888 853
889 animations_impl->Animate(kInitialTickTime + duration); 854 element_animations_impl_->Animate(kInitialTickTime + duration);
890 animations_impl->UpdateState(true, events.get()); 855 element_animations_impl_->UpdateState(true, events.get());
891 EXPECT_VECTOR2DF_EQ(target_value, client_impl_.GetScrollOffset( 856 EXPECT_VECTOR2DF_EQ(target_value, client_impl_.GetScrollOffset(
892 element_id_, ElementListType::ACTIVE)); 857 element_id_, ElementListType::ACTIVE));
893 EXPECT_FALSE(animations_impl->HasActiveAnimation()); 858 EXPECT_FALSE(player_impl_->HasActiveAnimation());
894 event = GetMostRecentPropertyUpdateEvent(events.get()); 859 event = GetMostRecentPropertyUpdateEvent(events.get());
895 EXPECT_FALSE(event); 860 EXPECT_FALSE(event);
896 861
897 animations->Animate(kInitialTickTime + duration); 862 element_animations_->Animate(kInitialTickTime + duration);
898 animations->UpdateState(true, nullptr); 863 element_animations_->UpdateState(true, nullptr);
899 EXPECT_VECTOR2DF_EQ(target_value, client_.GetScrollOffset( 864 EXPECT_VECTOR2DF_EQ(target_value, client_.GetScrollOffset(
900 element_id_, ElementListType::ACTIVE)); 865 element_id_, ElementListType::ACTIVE));
901 EXPECT_FALSE(animations->HasActiveAnimation()); 866 EXPECT_FALSE(player_->HasActiveAnimation());
902 } 867 }
903 868
904 TEST_F(ElementAnimationsTest, ScrollOffsetTransitionOnImplOnly) { 869 TEST_F(ElementAnimationsTest, ScrollOffsetTransitionOnImplOnly) {
905 CreateTestLayer(true, false); 870 CreateTestLayer(true, false);
906 AttachTimelinePlayerLayer(); 871 AttachTimelinePlayerLayer();
907 CreateImplTimelineAndPlayer(); 872 CreateImplTimelineAndPlayer();
908 873
909 scoped_refptr<ElementAnimations> animations_impl = element_animations_impl();
910
911 auto events = host_impl_->CreateEvents(); 874 auto events = host_impl_->CreateEvents();
912 875
913 gfx::ScrollOffset initial_value(100.f, 300.f); 876 gfx::ScrollOffset initial_value(100.f, 300.f);
914 gfx::ScrollOffset target_value(300.f, 200.f); 877 gfx::ScrollOffset target_value(300.f, 200.f);
915 std::unique_ptr<ScrollOffsetAnimationCurve> curve( 878 std::unique_ptr<ScrollOffsetAnimationCurve> curve(
916 ScrollOffsetAnimationCurve::Create( 879 ScrollOffsetAnimationCurve::Create(
917 target_value, CubicBezierTimingFunction::CreatePreset( 880 target_value, CubicBezierTimingFunction::CreatePreset(
918 CubicBezierTimingFunction::EaseType::EASE_IN_OUT))); 881 CubicBezierTimingFunction::EaseType::EASE_IN_OUT)));
919 curve->SetInitialValue(initial_value); 882 curve->SetInitialValue(initial_value);
920 double duration_in_seconds = curve->Duration().InSecondsF(); 883 double duration_in_seconds = curve->Duration().InSecondsF();
921 884
922 std::unique_ptr<Animation> animation( 885 std::unique_ptr<Animation> animation(
923 Animation::Create(std::move(curve), 1, 0, TargetProperty::SCROLL_OFFSET)); 886 Animation::Create(std::move(curve), 1, 0, TargetProperty::SCROLL_OFFSET));
924 animation->set_is_impl_only(true); 887 animation->set_is_impl_only(true);
925 animations_impl->AddAnimation(std::move(animation)); 888 player_impl_->AddAnimation(std::move(animation));
926 889
927 animations_impl->Animate(kInitialTickTime); 890 element_animations_impl_->Animate(kInitialTickTime);
928 animations_impl->UpdateState(true, events.get()); 891 element_animations_impl_->UpdateState(true, events.get());
929 EXPECT_TRUE(animations_impl->HasActiveAnimation()); 892 EXPECT_TRUE(player_impl_->HasActiveAnimation());
930 EXPECT_EQ(initial_value, 893 EXPECT_EQ(initial_value,
931 client_impl_.GetScrollOffset(element_id_, ElementListType::ACTIVE)); 894 client_impl_.GetScrollOffset(element_id_, ElementListType::ACTIVE));
932 // Scroll offset animations should not generate property updates. 895 // Scroll offset animations should not generate property updates.
933 const AnimationEvent* event = GetMostRecentPropertyUpdateEvent(events.get()); 896 const AnimationEvent* event = GetMostRecentPropertyUpdateEvent(events.get());
934 EXPECT_FALSE(event); 897 EXPECT_FALSE(event);
935 898
936 TimeDelta duration = TimeDelta::FromMicroseconds( 899 TimeDelta duration = TimeDelta::FromMicroseconds(
937 duration_in_seconds * base::Time::kMicrosecondsPerSecond); 900 duration_in_seconds * base::Time::kMicrosecondsPerSecond);
938 901
939 animations_impl->Animate(kInitialTickTime + duration / 2); 902 element_animations_impl_->Animate(kInitialTickTime + duration / 2);
940 animations_impl->UpdateState(true, events.get()); 903 element_animations_impl_->UpdateState(true, events.get());
941 EXPECT_VECTOR2DF_EQ( 904 EXPECT_VECTOR2DF_EQ(
942 gfx::Vector2dF(200.f, 250.f), 905 gfx::Vector2dF(200.f, 250.f),
943 client_impl_.GetScrollOffset(element_id_, ElementListType::ACTIVE)); 906 client_impl_.GetScrollOffset(element_id_, ElementListType::ACTIVE));
944 event = GetMostRecentPropertyUpdateEvent(events.get()); 907 event = GetMostRecentPropertyUpdateEvent(events.get());
945 EXPECT_FALSE(event); 908 EXPECT_FALSE(event);
946 909
947 animations_impl->Animate(kInitialTickTime + duration); 910 element_animations_impl_->Animate(kInitialTickTime + duration);
948 animations_impl->UpdateState(true, events.get()); 911 element_animations_impl_->UpdateState(true, events.get());
949 EXPECT_VECTOR2DF_EQ(target_value, client_impl_.GetScrollOffset( 912 EXPECT_VECTOR2DF_EQ(target_value, client_impl_.GetScrollOffset(
950 element_id_, ElementListType::ACTIVE)); 913 element_id_, ElementListType::ACTIVE));
951 EXPECT_FALSE(animations_impl->HasActiveAnimation()); 914 EXPECT_FALSE(player_impl_->HasActiveAnimation());
952 event = GetMostRecentPropertyUpdateEvent(events.get()); 915 event = GetMostRecentPropertyUpdateEvent(events.get());
953 EXPECT_FALSE(event); 916 EXPECT_FALSE(event);
954 } 917 }
955 918
956 // This test verifies that if an animation is added after a layer is animated, 919 // This test verifies that if an animation is added after a layer is animated,
957 // it doesn't get promoted to be in the RUNNING state. This prevents cases where 920 // it doesn't get promoted to be in the RUNNING state. This prevents cases where
958 // a start time gets set on an animation using the stale value of 921 // a start time gets set on an animation using the stale value of
959 // last_tick_time_. 922 // last_tick_time_.
960 TEST_F(ElementAnimationsTest, UpdateStateWithoutAnimate) { 923 TEST_F(ElementAnimationsTest, UpdateStateWithoutAnimate) {
961 CreateTestLayer(true, false); 924 CreateTestLayer(true, false);
962 AttachTimelinePlayerLayer(); 925 AttachTimelinePlayerLayer();
963 CreateImplTimelineAndPlayer(); 926 CreateImplTimelineAndPlayer();
964 927
965 scoped_refptr<ElementAnimations> animations_impl = element_animations_impl();
966
967 auto events = host_impl_->CreateEvents(); 928 auto events = host_impl_->CreateEvents();
968 929
969 // Add first scroll offset animation. 930 // Add first scroll offset animation.
970 AddScrollOffsetAnimationToElementAnimations( 931 AddScrollOffsetAnimationToPlayer(player_impl_.get(),
971 animations_impl.get(), gfx::ScrollOffset(100.f, 300.f), 932 gfx::ScrollOffset(100.f, 300.f),
972 gfx::ScrollOffset(100.f, 200.f), true); 933 gfx::ScrollOffset(100.f, 200.f), true);
973 934
974 // Calling UpdateState after Animate should promote the animation to running 935 // Calling UpdateState after Animate should promote the animation to running
975 // state. 936 // state.
976 animations_impl->Animate(kInitialTickTime); 937 element_animations_impl_->Animate(kInitialTickTime);
977 animations_impl->UpdateState(true, events.get()); 938 element_animations_impl_->UpdateState(true, events.get());
978 EXPECT_EQ(Animation::RUNNING, 939 EXPECT_EQ(
979 animations_impl->GetAnimation(TargetProperty::SCROLL_OFFSET) 940 Animation::RUNNING,
980 ->run_state()); 941 player_impl_->GetAnimation(TargetProperty::SCROLL_OFFSET)->run_state());
981 942
982 animations_impl->Animate(kInitialTickTime + 943 element_animations_impl_->Animate(kInitialTickTime +
983 TimeDelta::FromMilliseconds(1500)); 944 TimeDelta::FromMilliseconds(1500));
984 animations_impl->UpdateState(true, events.get()); 945 element_animations_impl_->UpdateState(true, events.get());
985 EXPECT_EQ(Animation::WAITING_FOR_DELETION, 946 EXPECT_EQ(
986 animations_impl->GetAnimation(TargetProperty::SCROLL_OFFSET) 947 Animation::WAITING_FOR_DELETION,
987 ->run_state()); 948 player_impl_->GetAnimation(TargetProperty::SCROLL_OFFSET)->run_state());
988 949
989 // Add second scroll offset animation. 950 // Add second scroll offset animation.
990 AddScrollOffsetAnimationToElementAnimations( 951 AddScrollOffsetAnimationToPlayer(player_impl_.get(),
991 animations_impl.get(), gfx::ScrollOffset(100.f, 200.f), 952 gfx::ScrollOffset(100.f, 200.f),
992 gfx::ScrollOffset(100.f, 100.f), true); 953 gfx::ScrollOffset(100.f, 100.f), true);
993 954
994 // Calling UpdateState without Animate should NOT promote the animation to 955 // Calling UpdateState without Animate should NOT promote the animation to
995 // running state. 956 // running state.
996 animations_impl->UpdateState(true, events.get()); 957 element_animations_impl_->UpdateState(true, events.get());
997 EXPECT_EQ(Animation::WAITING_FOR_TARGET_AVAILABILITY, 958 EXPECT_EQ(
998 animations_impl->GetAnimation(TargetProperty::SCROLL_OFFSET) 959 Animation::WAITING_FOR_TARGET_AVAILABILITY,
999 ->run_state()); 960 player_impl_->GetAnimation(TargetProperty::SCROLL_OFFSET)->run_state());
1000 961
1001 animations_impl->Animate(kInitialTickTime + 962 element_animations_impl_->Animate(kInitialTickTime +
1002 TimeDelta::FromMilliseconds(2000)); 963 TimeDelta::FromMilliseconds(2000));
1003 animations_impl->UpdateState(true, events.get()); 964 element_animations_impl_->UpdateState(true, events.get());
1004 965
1005 EXPECT_EQ(Animation::RUNNING, 966 EXPECT_EQ(
1006 animations_impl->GetAnimation(TargetProperty::SCROLL_OFFSET) 967 Animation::RUNNING,
1007 ->run_state()); 968 player_impl_->GetAnimation(TargetProperty::SCROLL_OFFSET)->run_state());
1008 EXPECT_VECTOR2DF_EQ( 969 EXPECT_VECTOR2DF_EQ(
1009 gfx::ScrollOffset(100.f, 200.f), 970 gfx::ScrollOffset(100.f, 200.f),
1010 client_impl_.GetScrollOffset(element_id_, ElementListType::ACTIVE)); 971 client_impl_.GetScrollOffset(element_id_, ElementListType::ACTIVE));
1011 } 972 }
1012 973
1013 // Ensure that when the impl animations doesn't have a value provider, 974 // Ensure that when the impl animations doesn't have a value provider,
1014 // the main-thread animations's value provider is used to obtain the intial 975 // the main-thread animations's value provider is used to obtain the intial
1015 // scroll offset. 976 // scroll offset.
1016 TEST_F(ElementAnimationsTest, ScrollOffsetTransitionNoImplProvider) { 977 TEST_F(ElementAnimationsTest, ScrollOffsetTransitionNoImplProvider) {
1017 CreateTestLayer(false, false); 978 CreateTestLayer(false, false);
1018 CreateTestImplLayer(ElementListType::PENDING); 979 CreateTestImplLayer(ElementListType::PENDING);
1019 AttachTimelinePlayerLayer(); 980 AttachTimelinePlayerLayer();
1020 CreateImplTimelineAndPlayer(); 981 CreateImplTimelineAndPlayer();
1021 982
1022 scoped_refptr<ElementAnimations> animations = element_animations(); 983 EXPECT_TRUE(element_animations_impl_->has_element_in_pending_list());
1023 scoped_refptr<ElementAnimations> animations_impl = element_animations_impl(); 984 EXPECT_FALSE(element_animations_impl_->has_element_in_active_list());
1024
1025 EXPECT_TRUE(animations_impl->has_element_in_pending_list());
1026 EXPECT_FALSE(animations_impl->has_element_in_active_list());
1027 985
1028 auto events = host_impl_->CreateEvents(); 986 auto events = host_impl_->CreateEvents();
1029 987
1030 gfx::ScrollOffset initial_value(500.f, 100.f); 988 gfx::ScrollOffset initial_value(500.f, 100.f);
1031 gfx::ScrollOffset target_value(300.f, 200.f); 989 gfx::ScrollOffset target_value(300.f, 200.f);
1032 std::unique_ptr<ScrollOffsetAnimationCurve> curve( 990 std::unique_ptr<ScrollOffsetAnimationCurve> curve(
1033 ScrollOffsetAnimationCurve::Create( 991 ScrollOffsetAnimationCurve::Create(
1034 target_value, CubicBezierTimingFunction::CreatePreset( 992 target_value, CubicBezierTimingFunction::CreatePreset(
1035 CubicBezierTimingFunction::EaseType::EASE_IN_OUT))); 993 CubicBezierTimingFunction::EaseType::EASE_IN_OUT)));
1036 994
1037 std::unique_ptr<Animation> animation( 995 std::unique_ptr<Animation> animation(
1038 Animation::Create(std::move(curve), 1, 0, TargetProperty::SCROLL_OFFSET)); 996 Animation::Create(std::move(curve), 1, 0, TargetProperty::SCROLL_OFFSET));
1039 animation->set_needs_synchronized_start_time(true); 997 animation->set_needs_synchronized_start_time(true);
1040 animations->AddAnimation(std::move(animation)); 998 player_->AddAnimation(std::move(animation));
1041 999
1042 client_.SetScrollOffsetForAnimation(initial_value); 1000 client_.SetScrollOffsetForAnimation(initial_value);
1043 PushProperties(); 1001 PushProperties();
1044 animations_impl->ActivateAnimations(); 1002 player_impl_->ActivateAnimations();
1045 EXPECT_TRUE(animations_impl->GetAnimation(TargetProperty::SCROLL_OFFSET)); 1003 EXPECT_TRUE(player_impl_->GetAnimation(TargetProperty::SCROLL_OFFSET));
1046 TimeDelta duration = 1004 TimeDelta duration = player_impl_->GetAnimation(TargetProperty::SCROLL_OFFSET)
1047 animations_impl->GetAnimation(TargetProperty::SCROLL_OFFSET) 1005 ->curve()
1048 ->curve() 1006 ->Duration();
1049 ->Duration(); 1007 EXPECT_EQ(duration, player_->GetAnimation(TargetProperty::SCROLL_OFFSET)
1050 EXPECT_EQ(duration, animations->GetAnimation(TargetProperty::SCROLL_OFFSET)
1051 ->curve() 1008 ->curve()
1052 ->Duration()); 1009 ->Duration());
1053 1010
1054 animations->Animate(kInitialTickTime); 1011 element_animations_->Animate(kInitialTickTime);
1055 animations->UpdateState(true, nullptr); 1012 element_animations_->UpdateState(true, nullptr);
1056 1013
1057 EXPECT_TRUE(animations->HasActiveAnimation()); 1014 EXPECT_TRUE(player_->HasActiveAnimation());
1058 EXPECT_EQ(initial_value, 1015 EXPECT_EQ(initial_value,
1059 client_.GetScrollOffset(element_id_, ElementListType::ACTIVE)); 1016 client_.GetScrollOffset(element_id_, ElementListType::ACTIVE));
1060 EXPECT_EQ(gfx::ScrollOffset(), client_impl_.GetScrollOffset( 1017 EXPECT_EQ(gfx::ScrollOffset(), client_impl_.GetScrollOffset(
1061 element_id_, ElementListType::PENDING)); 1018 element_id_, ElementListType::PENDING));
1062 1019
1063 animations_impl->Animate(kInitialTickTime); 1020 element_animations_impl_->Animate(kInitialTickTime);
1064 1021
1065 EXPECT_TRUE(animations_impl->HasActiveAnimation()); 1022 EXPECT_TRUE(player_impl_->HasActiveAnimation());
1066 EXPECT_EQ(initial_value, client_impl_.GetScrollOffset( 1023 EXPECT_EQ(initial_value, client_impl_.GetScrollOffset(
1067 element_id_, ElementListType::PENDING)); 1024 element_id_, ElementListType::PENDING));
1068 1025
1069 CreateTestImplLayer(ElementListType::ACTIVE); 1026 CreateTestImplLayer(ElementListType::ACTIVE);
1070 1027
1071 animations_impl->UpdateState(true, events.get()); 1028 element_animations_impl_->UpdateState(true, events.get());
1072 DCHECK_EQ(1UL, events->events_.size()); 1029 DCHECK_EQ(1UL, events->events_.size());
1073 1030
1074 // Scroll offset animations should not generate property updates. 1031 // Scroll offset animations should not generate property updates.
1075 const AnimationEvent* event = GetMostRecentPropertyUpdateEvent(events.get()); 1032 const AnimationEvent* event = GetMostRecentPropertyUpdateEvent(events.get());
1076 EXPECT_FALSE(event); 1033 EXPECT_FALSE(event);
1077 1034
1078 animations->NotifyAnimationStarted(events->events_[0]); 1035 player_->NotifyAnimationStarted(events->events_[0]);
1079 animations->Animate(kInitialTickTime + duration / 2); 1036 element_animations_->Animate(kInitialTickTime + duration / 2);
1080 animations->UpdateState(true, nullptr); 1037 element_animations_->UpdateState(true, nullptr);
1081 EXPECT_TRUE(animations->HasActiveAnimation()); 1038 EXPECT_TRUE(player_->HasActiveAnimation());
1082 EXPECT_VECTOR2DF_EQ( 1039 EXPECT_VECTOR2DF_EQ(
1083 gfx::Vector2dF(400.f, 150.f), 1040 gfx::Vector2dF(400.f, 150.f),
1084 client_.GetScrollOffset(element_id_, ElementListType::ACTIVE)); 1041 client_.GetScrollOffset(element_id_, ElementListType::ACTIVE));
1085 1042
1086 animations_impl->Animate(kInitialTickTime + duration / 2); 1043 element_animations_impl_->Animate(kInitialTickTime + duration / 2);
1087 animations_impl->UpdateState(true, events.get()); 1044 element_animations_impl_->UpdateState(true, events.get());
1088 EXPECT_VECTOR2DF_EQ( 1045 EXPECT_VECTOR2DF_EQ(
1089 gfx::Vector2dF(400.f, 150.f), 1046 gfx::Vector2dF(400.f, 150.f),
1090 client_impl_.GetScrollOffset(element_id_, ElementListType::PENDING)); 1047 client_impl_.GetScrollOffset(element_id_, ElementListType::PENDING));
1091 event = GetMostRecentPropertyUpdateEvent(events.get()); 1048 event = GetMostRecentPropertyUpdateEvent(events.get());
1092 EXPECT_FALSE(event); 1049 EXPECT_FALSE(event);
1093 1050
1094 animations_impl->Animate(kInitialTickTime + duration); 1051 element_animations_impl_->Animate(kInitialTickTime + duration);
1095 animations_impl->UpdateState(true, events.get()); 1052 element_animations_impl_->UpdateState(true, events.get());
1096 EXPECT_VECTOR2DF_EQ(target_value, client_impl_.GetScrollOffset( 1053 EXPECT_VECTOR2DF_EQ(target_value, client_impl_.GetScrollOffset(
1097 element_id_, ElementListType::PENDING)); 1054 element_id_, ElementListType::PENDING));
1098 EXPECT_FALSE(animations_impl->HasActiveAnimation()); 1055 EXPECT_FALSE(player_impl_->HasActiveAnimation());
1099 event = GetMostRecentPropertyUpdateEvent(events.get()); 1056 event = GetMostRecentPropertyUpdateEvent(events.get());
1100 EXPECT_FALSE(event); 1057 EXPECT_FALSE(event);
1101 1058
1102 animations->Animate(kInitialTickTime + duration); 1059 element_animations_->Animate(kInitialTickTime + duration);
1103 animations->UpdateState(true, nullptr); 1060 element_animations_->UpdateState(true, nullptr);
1104 EXPECT_VECTOR2DF_EQ(target_value, client_.GetScrollOffset( 1061 EXPECT_VECTOR2DF_EQ(target_value, client_.GetScrollOffset(
1105 element_id_, ElementListType::ACTIVE)); 1062 element_id_, ElementListType::ACTIVE));
1106 EXPECT_FALSE(animations->HasActiveAnimation()); 1063 EXPECT_FALSE(player_->HasActiveAnimation());
1107 } 1064 }
1108 1065
1109 TEST_F(ElementAnimationsTest, ScrollOffsetRemovalClearsScrollDelta) { 1066 TEST_F(ElementAnimationsTest, ScrollOffsetRemovalClearsScrollDelta) {
1110 CreateTestLayer(true, false); 1067 CreateTestLayer(true, false);
1111 AttachTimelinePlayerLayer(); 1068 AttachTimelinePlayerLayer();
1112 CreateImplTimelineAndPlayer(); 1069 CreateImplTimelineAndPlayer();
1113 1070
1114 scoped_refptr<ElementAnimations> animations = element_animations();
1115 scoped_refptr<ElementAnimations> animations_impl = element_animations_impl();
1116
1117 auto events = host_impl_->CreateEvents(); 1071 auto events = host_impl_->CreateEvents();
1118 1072
1119 // First test the 1-argument version of RemoveAnimation. 1073 // First test the 1-argument version of RemoveAnimation.
1120 gfx::ScrollOffset target_value(300.f, 200.f); 1074 gfx::ScrollOffset target_value(300.f, 200.f);
1121 std::unique_ptr<ScrollOffsetAnimationCurve> curve( 1075 std::unique_ptr<ScrollOffsetAnimationCurve> curve(
1122 ScrollOffsetAnimationCurve::Create( 1076 ScrollOffsetAnimationCurve::Create(
1123 target_value, CubicBezierTimingFunction::CreatePreset( 1077 target_value, CubicBezierTimingFunction::CreatePreset(
1124 CubicBezierTimingFunction::EaseType::EASE_IN_OUT))); 1078 CubicBezierTimingFunction::EaseType::EASE_IN_OUT)));
1125 1079
1126 int animation_id = 1; 1080 int animation_id = 1;
1127 std::unique_ptr<Animation> animation(Animation::Create( 1081 std::unique_ptr<Animation> animation(Animation::Create(
1128 std::move(curve), animation_id, 0, TargetProperty::SCROLL_OFFSET)); 1082 std::move(curve), animation_id, 0, TargetProperty::SCROLL_OFFSET));
1129 animation->set_needs_synchronized_start_time(true); 1083 animation->set_needs_synchronized_start_time(true);
1130 animations->AddAnimation(std::move(animation)); 1084 player_->AddAnimation(std::move(animation));
1131 PushProperties(); 1085 PushProperties();
1132 animations_impl->ActivateAnimations(); 1086 element_animations_impl_->ActivateAnimations();
1133 EXPECT_FALSE(animations->scroll_offset_animation_was_interrupted()); 1087 EXPECT_FALSE(element_animations_->scroll_offset_animation_was_interrupted());
1134 EXPECT_FALSE(animations_impl->scroll_offset_animation_was_interrupted()); 1088 EXPECT_FALSE(
1089 element_animations_impl_->scroll_offset_animation_was_interrupted());
1135 1090
1136 animations->RemoveAnimation(animation_id); 1091 player_->RemoveAnimation(animation_id);
1137 EXPECT_TRUE(animations->scroll_offset_animation_was_interrupted()); 1092 EXPECT_TRUE(element_animations_->scroll_offset_animation_was_interrupted());
1138 1093
1139 PushProperties(); 1094 PushProperties();
1140 EXPECT_TRUE(animations_impl->scroll_offset_animation_was_interrupted()); 1095 EXPECT_TRUE(
1141 EXPECT_FALSE(animations->scroll_offset_animation_was_interrupted()); 1096 element_animations_impl_->scroll_offset_animation_was_interrupted());
1097 EXPECT_FALSE(element_animations_->scroll_offset_animation_was_interrupted());
1142 1098
1143 animations_impl->ActivateAnimations(); 1099 element_animations_impl_->ActivateAnimations();
1144 EXPECT_FALSE(animations_impl->scroll_offset_animation_was_interrupted()); 1100 EXPECT_FALSE(
1101 element_animations_impl_->scroll_offset_animation_was_interrupted());
1145 1102
1146 // Now, test the 2-argument version of RemoveAnimation. 1103 // Now, test the 2-argument version of RemoveAnimation.
1147 curve = ScrollOffsetAnimationCurve::Create( 1104 curve = ScrollOffsetAnimationCurve::Create(
1148 target_value, CubicBezierTimingFunction::CreatePreset( 1105 target_value, CubicBezierTimingFunction::CreatePreset(
1149 CubicBezierTimingFunction::EaseType::EASE_IN_OUT)); 1106 CubicBezierTimingFunction::EaseType::EASE_IN_OUT));
1150 animation = Animation::Create(std::move(curve), animation_id, 0, 1107 animation = Animation::Create(std::move(curve), animation_id, 0,
1151 TargetProperty::SCROLL_OFFSET); 1108 TargetProperty::SCROLL_OFFSET);
1152 animation->set_needs_synchronized_start_time(true); 1109 animation->set_needs_synchronized_start_time(true);
1153 animations->AddAnimation(std::move(animation)); 1110 player_->AddAnimation(std::move(animation));
1154 PushProperties(); 1111 PushProperties();
1155 animations_impl->ActivateAnimations(); 1112 element_animations_impl_->ActivateAnimations();
1156 EXPECT_FALSE(animations->scroll_offset_animation_was_interrupted()); 1113 EXPECT_FALSE(element_animations_->scroll_offset_animation_was_interrupted());
1157 EXPECT_FALSE(animations_impl->scroll_offset_animation_was_interrupted()); 1114 EXPECT_FALSE(
1115 element_animations_impl_->scroll_offset_animation_was_interrupted());
1158 1116
1159 animations->RemoveAnimation(animation_id); 1117 player_->RemoveAnimation(animation_id);
1160 EXPECT_TRUE(animations->scroll_offset_animation_was_interrupted()); 1118 EXPECT_TRUE(element_animations_->scroll_offset_animation_was_interrupted());
1161 1119
1162 PushProperties(); 1120 PushProperties();
1163 EXPECT_TRUE(animations_impl->scroll_offset_animation_was_interrupted()); 1121 EXPECT_TRUE(
1164 EXPECT_FALSE(animations->scroll_offset_animation_was_interrupted()); 1122 element_animations_impl_->scroll_offset_animation_was_interrupted());
1123 EXPECT_FALSE(element_animations_->scroll_offset_animation_was_interrupted());
1165 1124
1166 animations_impl->ActivateAnimations(); 1125 element_animations_impl_->ActivateAnimations();
1167 EXPECT_FALSE(animations_impl->scroll_offset_animation_was_interrupted()); 1126 EXPECT_FALSE(
1127 element_animations_impl_->scroll_offset_animation_was_interrupted());
1168 1128
1169 // Check that removing non-scroll-offset animations does not cause 1129 // Check that removing non-scroll-offset animations does not cause
1170 // scroll_offset_animation_was_interrupted() to get set. 1130 // scroll_offset_animation_was_interrupted() to get set.
1171 animation_id = 1131 animation_id = AddAnimatedTransformToPlayer(player_.get(), 1.0, 1, 2);
1172 AddAnimatedTransformToElementAnimations(animations.get(), 1.0, 1, 2);
1173 PushProperties(); 1132 PushProperties();
1174 animations_impl->ActivateAnimations(); 1133 element_animations_impl_->ActivateAnimations();
1175 EXPECT_FALSE(animations->scroll_offset_animation_was_interrupted()); 1134 EXPECT_FALSE(element_animations_->scroll_offset_animation_was_interrupted());
1176 EXPECT_FALSE(animations_impl->scroll_offset_animation_was_interrupted()); 1135 EXPECT_FALSE(
1136 element_animations_impl_->scroll_offset_animation_was_interrupted());
1177 1137
1178 animations->RemoveAnimation(animation_id); 1138 player_->RemoveAnimation(animation_id);
1179 EXPECT_FALSE(animations->scroll_offset_animation_was_interrupted()); 1139 EXPECT_FALSE(element_animations_->scroll_offset_animation_was_interrupted());
1180 1140
1181 PushProperties(); 1141 PushProperties();
1182 EXPECT_FALSE(animations_impl->scroll_offset_animation_was_interrupted()); 1142 EXPECT_FALSE(
1183 EXPECT_FALSE(animations->scroll_offset_animation_was_interrupted()); 1143 element_animations_impl_->scroll_offset_animation_was_interrupted());
1144 EXPECT_FALSE(element_animations_->scroll_offset_animation_was_interrupted());
1184 1145
1185 animations_impl->ActivateAnimations(); 1146 element_animations_impl_->ActivateAnimations();
1186 EXPECT_FALSE(animations_impl->scroll_offset_animation_was_interrupted()); 1147 EXPECT_FALSE(
1148 element_animations_impl_->scroll_offset_animation_was_interrupted());
1187 1149
1188 animation_id = 1150 animation_id = AddAnimatedFilterToPlayer(player_.get(), 1.0, 0.1f, 0.2f);
1189 AddAnimatedFilterToElementAnimations(animations.get(), 1.0, 0.1f, 0.2f);
1190 PushProperties(); 1151 PushProperties();
1191 animations_impl->ActivateAnimations(); 1152 element_animations_impl_->ActivateAnimations();
1192 EXPECT_FALSE(animations->scroll_offset_animation_was_interrupted()); 1153 EXPECT_FALSE(element_animations_->scroll_offset_animation_was_interrupted());
1193 EXPECT_FALSE(animations_impl->scroll_offset_animation_was_interrupted()); 1154 EXPECT_FALSE(
1155 element_animations_impl_->scroll_offset_animation_was_interrupted());
1194 1156
1195 animations->RemoveAnimation(animation_id); 1157 player_->RemoveAnimation(animation_id);
1196 EXPECT_FALSE(animations->scroll_offset_animation_was_interrupted()); 1158 EXPECT_FALSE(element_animations_->scroll_offset_animation_was_interrupted());
1197 1159
1198 PushProperties(); 1160 PushProperties();
1199 EXPECT_FALSE(animations_impl->scroll_offset_animation_was_interrupted()); 1161 EXPECT_FALSE(
1200 EXPECT_FALSE(animations->scroll_offset_animation_was_interrupted()); 1162 element_animations_impl_->scroll_offset_animation_was_interrupted());
1163 EXPECT_FALSE(element_animations_->scroll_offset_animation_was_interrupted());
1201 1164
1202 animations_impl->ActivateAnimations(); 1165 element_animations_impl_->ActivateAnimations();
1203 EXPECT_FALSE(animations_impl->scroll_offset_animation_was_interrupted()); 1166 EXPECT_FALSE(
1167 element_animations_impl_->scroll_offset_animation_was_interrupted());
1204 } 1168 }
1205 1169
1206 // Tests that impl-only animations lead to start and finished notifications 1170 // Tests that impl-only animations lead to start and finished notifications
1207 // on the impl thread animations's animation delegate. 1171 // on the impl thread animations's animation delegate.
1208 TEST_F(ElementAnimationsTest, 1172 TEST_F(ElementAnimationsTest,
1209 NotificationsForImplOnlyAnimationsAreSentToImplThreadDelegate) { 1173 NotificationsForImplOnlyAnimationsAreSentToImplThreadDelegate) {
1210 CreateTestLayer(true, false); 1174 CreateTestLayer(true, false);
1211 AttachTimelinePlayerLayer(); 1175 AttachTimelinePlayerLayer();
1212 CreateImplTimelineAndPlayer(); 1176 CreateImplTimelineAndPlayer();
1213 1177
1214 scoped_refptr<ElementAnimations> animations = element_animations();
1215 scoped_refptr<ElementAnimations> animations_impl = element_animations_impl();
1216
1217 auto events = host_impl_->CreateEvents(); 1178 auto events = host_impl_->CreateEvents();
1218 1179
1219 TestAnimationDelegate delegate; 1180 TestAnimationDelegate delegate;
1220 player_impl_->set_animation_delegate(&delegate); 1181 player_impl_->set_animation_delegate(&delegate);
1221 1182
1222 gfx::ScrollOffset initial_value(100.f, 300.f); 1183 gfx::ScrollOffset initial_value(100.f, 300.f);
1223 gfx::ScrollOffset target_value(300.f, 200.f); 1184 gfx::ScrollOffset target_value(300.f, 200.f);
1224 std::unique_ptr<ScrollOffsetAnimationCurve> curve( 1185 std::unique_ptr<ScrollOffsetAnimationCurve> curve(
1225 ScrollOffsetAnimationCurve::Create( 1186 ScrollOffsetAnimationCurve::Create(
1226 target_value, CubicBezierTimingFunction::CreatePreset( 1187 target_value, CubicBezierTimingFunction::CreatePreset(
1227 CubicBezierTimingFunction::EaseType::EASE_IN_OUT))); 1188 CubicBezierTimingFunction::EaseType::EASE_IN_OUT)));
1228 curve->SetInitialValue(initial_value); 1189 curve->SetInitialValue(initial_value);
1229 TimeDelta duration = curve->Duration(); 1190 TimeDelta duration = curve->Duration();
1230 std::unique_ptr<Animation> to_add( 1191 std::unique_ptr<Animation> to_add(
1231 Animation::Create(std::move(curve), 1, 0, TargetProperty::SCROLL_OFFSET)); 1192 Animation::Create(std::move(curve), 1, 0, TargetProperty::SCROLL_OFFSET));
1232 to_add->set_is_impl_only(true); 1193 to_add->set_is_impl_only(true);
1233 animations_impl->AddAnimation(std::move(to_add)); 1194 player_impl_->AddAnimation(std::move(to_add));
1234 1195
1235 EXPECT_FALSE(delegate.started()); 1196 EXPECT_FALSE(delegate.started());
1236 EXPECT_FALSE(delegate.finished()); 1197 EXPECT_FALSE(delegate.finished());
1237 1198
1238 animations_impl->Animate(kInitialTickTime); 1199 element_animations_impl_->Animate(kInitialTickTime);
1239 animations_impl->UpdateState(true, events.get()); 1200 element_animations_impl_->UpdateState(true, events.get());
1240 1201
1241 EXPECT_TRUE(delegate.started()); 1202 EXPECT_TRUE(delegate.started());
1242 EXPECT_FALSE(delegate.finished()); 1203 EXPECT_FALSE(delegate.finished());
1243 1204
1244 events = host_impl_->CreateEvents(); 1205 events = host_impl_->CreateEvents();
1245 animations_impl->Animate(kInitialTickTime + duration); 1206 element_animations_impl_->Animate(kInitialTickTime + duration);
1246 EXPECT_EQ(duration, 1207 EXPECT_EQ(duration, player_impl_->GetAnimation(TargetProperty::SCROLL_OFFSET)
1247 animations_impl->GetAnimation(TargetProperty::SCROLL_OFFSET) 1208 ->curve()
1248 ->curve() 1209 ->Duration());
1249 ->Duration()); 1210 element_animations_impl_->UpdateState(true, events.get());
1250 animations_impl->UpdateState(true, events.get());
1251 1211
1252 EXPECT_TRUE(delegate.started()); 1212 EXPECT_TRUE(delegate.started());
1253 EXPECT_TRUE(delegate.finished()); 1213 EXPECT_TRUE(delegate.finished());
1254 } 1214 }
1255 1215
1256 // Tests that specified start times are sent to the main thread delegate 1216 // Tests that specified start times are sent to the main thread delegate
1257 TEST_F(ElementAnimationsTest, SpecifiedStartTimesAreSentToMainThreadDelegate) { 1217 TEST_F(ElementAnimationsTest, SpecifiedStartTimesAreSentToMainThreadDelegate) {
1258 CreateTestLayer(true, false); 1218 CreateTestLayer(true, false);
1259 AttachTimelinePlayerLayer(); 1219 AttachTimelinePlayerLayer();
1260 CreateImplTimelineAndPlayer(); 1220 CreateImplTimelineAndPlayer();
1261 1221
1262 scoped_refptr<ElementAnimations> animations = element_animations();
1263 scoped_refptr<ElementAnimations> animations_impl = element_animations_impl();
1264
1265 TestAnimationDelegate delegate; 1222 TestAnimationDelegate delegate;
1266 player_->set_animation_delegate(&delegate); 1223 player_->set_animation_delegate(&delegate);
1267 1224
1268 int animation_id = 1225 int animation_id =
1269 AddOpacityTransitionToElementAnimations(animations.get(), 1, 0, 1, false); 1226 AddOpacityTransitionToPlayer(player_.get(), 1, 0, 1, false);
1270 1227
1271 const TimeTicks start_time = TicksFromSecondsF(123); 1228 const TimeTicks start_time = TicksFromSecondsF(123);
1272 animations->GetAnimation(TargetProperty::OPACITY)->set_start_time(start_time); 1229 player_->GetAnimation(TargetProperty::OPACITY)->set_start_time(start_time);
1273 1230
1274 PushProperties(); 1231 PushProperties();
1275 animations_impl->ActivateAnimations(); 1232 player_impl_->ActivateAnimations();
1276 1233
1277 EXPECT_TRUE(animations_impl->GetAnimationById(animation_id)); 1234 EXPECT_TRUE(player_impl_->GetAnimationById(animation_id));
1278 EXPECT_EQ(Animation::WAITING_FOR_TARGET_AVAILABILITY, 1235 EXPECT_EQ(Animation::WAITING_FOR_TARGET_AVAILABILITY,
1279 animations_impl->GetAnimationById(animation_id)->run_state()); 1236 player_impl_->GetAnimationById(animation_id)->run_state());
1280 1237
1281 auto events = host_impl_->CreateEvents(); 1238 auto events = host_impl_->CreateEvents();
1282 animations_impl->Animate(kInitialTickTime); 1239 element_animations_impl_->Animate(kInitialTickTime);
1283 animations_impl->UpdateState(true, events.get()); 1240 element_animations_impl_->UpdateState(true, events.get());
1284 1241
1285 // Synchronize the start times. 1242 // Synchronize the start times.
1286 EXPECT_EQ(1u, events->events_.size()); 1243 EXPECT_EQ(1u, events->events_.size());
1287 animations->NotifyAnimationStarted(events->events_[0]); 1244 player_->NotifyAnimationStarted(events->events_[0]);
1288 1245
1289 // Validate start time on the main thread delegate. 1246 // Validate start time on the main thread delegate.
1290 EXPECT_EQ(start_time, delegate.start_time()); 1247 EXPECT_EQ(start_time, delegate.start_time());
1291 } 1248 }
1292 1249
1293 // Tests animations that are waiting for a synchronized start time do not 1250 // Tests animations that are waiting for a synchronized start time do not
1294 // finish. 1251 // finish.
1295 TEST_F(ElementAnimationsTest, 1252 TEST_F(ElementAnimationsTest,
1296 AnimationsWaitingForStartTimeDoNotFinishIfTheyOutwaitTheirFinish) { 1253 AnimationsWaitingForStartTimeDoNotFinishIfTheyOutwaitTheirFinish) {
1297 CreateTestLayer(false, false); 1254 CreateTestLayer(false, false);
1298 AttachTimelinePlayerLayer(); 1255 AttachTimelinePlayerLayer();
1299 1256
1300 scoped_refptr<ElementAnimations> animations = element_animations();
1301
1302 auto events = host_impl_->CreateEvents(); 1257 auto events = host_impl_->CreateEvents();
1303 1258
1304 std::unique_ptr<Animation> to_add(CreateAnimation( 1259 std::unique_ptr<Animation> to_add(CreateAnimation(
1305 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)), 1260 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)),
1306 1, TargetProperty::OPACITY)); 1261 1, TargetProperty::OPACITY));
1307 to_add->set_needs_synchronized_start_time(true); 1262 to_add->set_needs_synchronized_start_time(true);
1308 1263
1309 // We should pause at the first keyframe indefinitely waiting for that 1264 // We should pause at the first keyframe indefinitely waiting for that
1310 // animation to start. 1265 // animation to start.
1311 animations->AddAnimation(std::move(to_add)); 1266 player_->AddAnimation(std::move(to_add));
1312 animations->Animate(kInitialTickTime); 1267 element_animations_->Animate(kInitialTickTime);
1313 animations->UpdateState(true, events.get()); 1268 element_animations_->UpdateState(true, events.get());
1314 EXPECT_TRUE(animations->HasActiveAnimation()); 1269 EXPECT_TRUE(player_->HasActiveAnimation());
1315 EXPECT_EQ(0.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1270 EXPECT_EQ(0.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1316 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1000)); 1271 element_animations_->Animate(kInitialTickTime +
1317 animations->UpdateState(true, events.get()); 1272 TimeDelta::FromMilliseconds(1000));
1318 EXPECT_TRUE(animations->HasActiveAnimation()); 1273 element_animations_->UpdateState(true, events.get());
1274 EXPECT_TRUE(player_->HasActiveAnimation());
1319 EXPECT_EQ(0.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1275 EXPECT_EQ(0.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1320 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(2000)); 1276 element_animations_->Animate(kInitialTickTime +
1321 animations->UpdateState(true, events.get()); 1277 TimeDelta::FromMilliseconds(2000));
1322 EXPECT_TRUE(animations->HasActiveAnimation()); 1278 element_animations_->UpdateState(true, events.get());
1279 EXPECT_TRUE(player_->HasActiveAnimation());
1323 EXPECT_EQ(0.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1280 EXPECT_EQ(0.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1324 1281
1325 // Send the synchronized start time. 1282 // Send the synchronized start time.
1326 animations->NotifyAnimationStarted(AnimationEvent( 1283 player_->NotifyAnimationStarted(AnimationEvent(
1327 AnimationEvent::STARTED, ElementId(), 1, TargetProperty::OPACITY, 1284 AnimationEvent::STARTED, ElementId(), 1, TargetProperty::OPACITY,
1328 kInitialTickTime + TimeDelta::FromMilliseconds(2000))); 1285 kInitialTickTime + TimeDelta::FromMilliseconds(2000)));
1329 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(5000)); 1286 element_animations_->Animate(kInitialTickTime +
1330 animations->UpdateState(true, events.get()); 1287 TimeDelta::FromMilliseconds(5000));
1288 element_animations_->UpdateState(true, events.get());
1331 EXPECT_EQ(1.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1289 EXPECT_EQ(1.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1332 EXPECT_FALSE(animations->HasActiveAnimation()); 1290 EXPECT_FALSE(player_->HasActiveAnimation());
1333 } 1291 }
1334 1292
1335 // Tests that two queued animations affecting the same property run in sequence. 1293 // Tests that two queued animations affecting the same property run in sequence.
1336 TEST_F(ElementAnimationsTest, TrivialQueuing) { 1294 TEST_F(ElementAnimationsTest, TrivialQueuing) {
1337 CreateTestLayer(false, false); 1295 CreateTestLayer(false, false);
1338 AttachTimelinePlayerLayer(); 1296 AttachTimelinePlayerLayer();
1339 1297
1340 scoped_refptr<ElementAnimations> animations = element_animations();
1341
1342 auto events = host_impl_->CreateEvents(); 1298 auto events = host_impl_->CreateEvents();
1343 1299
1344 EXPECT_FALSE(animations->needs_to_start_animations_for_testing()); 1300 EXPECT_FALSE(player_->needs_to_start_animations());
1345 1301
1346 animations->AddAnimation(CreateAnimation( 1302 player_->AddAnimation(CreateAnimation(
1347 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)), 1303 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)),
1348 1, TargetProperty::OPACITY)); 1304 1, TargetProperty::OPACITY));
1349 animations->AddAnimation(CreateAnimation( 1305 player_->AddAnimation(CreateAnimation(
1350 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 1.f, 0.5f)), 1306 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 1.f, 0.5f)),
1351 2, TargetProperty::OPACITY)); 1307 2, TargetProperty::OPACITY));
1352 1308
1353 EXPECT_TRUE(animations->needs_to_start_animations_for_testing()); 1309 EXPECT_TRUE(player_->needs_to_start_animations());
1354 1310
1355 animations->Animate(kInitialTickTime); 1311 element_animations_->Animate(kInitialTickTime);
1356 1312
1357 // The second animation still needs to be started. 1313 // The second animation still needs to be started.
1358 EXPECT_TRUE(animations->needs_to_start_animations_for_testing()); 1314 EXPECT_TRUE(player_->needs_to_start_animations());
1359 1315
1360 animations->UpdateState(true, events.get()); 1316 element_animations_->UpdateState(true, events.get());
1361 EXPECT_TRUE(animations->HasActiveAnimation()); 1317 EXPECT_TRUE(player_->HasActiveAnimation());
1362 EXPECT_EQ(0.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1318 EXPECT_EQ(0.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1363 1319
1364 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1000)); 1320 element_animations_->Animate(kInitialTickTime +
1365 EXPECT_TRUE(animations->needs_to_start_animations_for_testing()); 1321 TimeDelta::FromMilliseconds(1000));
1366 animations->UpdateState(true, events.get()); 1322 EXPECT_TRUE(player_->needs_to_start_animations());
1367 EXPECT_FALSE(animations->needs_to_start_animations_for_testing()); 1323 element_animations_->UpdateState(true, events.get());
1324 EXPECT_FALSE(player_->needs_to_start_animations());
1368 1325
1369 EXPECT_TRUE(animations->HasActiveAnimation()); 1326 EXPECT_TRUE(player_->HasActiveAnimation());
1370 EXPECT_EQ(1.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1327 EXPECT_EQ(1.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1371 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(2000)); 1328 element_animations_->Animate(kInitialTickTime +
1372 animations->UpdateState(true, events.get()); 1329 TimeDelta::FromMilliseconds(2000));
1330 element_animations_->UpdateState(true, events.get());
1373 EXPECT_EQ(0.5f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1331 EXPECT_EQ(0.5f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1374 EXPECT_FALSE(animations->HasActiveAnimation()); 1332 EXPECT_FALSE(player_->HasActiveAnimation());
1375 } 1333 }
1376 1334
1377 // Tests interrupting a transition with another transition. 1335 // Tests interrupting a transition with another transition.
1378 TEST_F(ElementAnimationsTest, Interrupt) { 1336 TEST_F(ElementAnimationsTest, Interrupt) {
1379 CreateTestLayer(false, false); 1337 CreateTestLayer(false, false);
1380 AttachTimelinePlayerLayer(); 1338 AttachTimelinePlayerLayer();
1381 1339
1382 scoped_refptr<ElementAnimations> animations = element_animations();
1383
1384 auto events = host_impl_->CreateEvents(); 1340 auto events = host_impl_->CreateEvents();
1385 1341
1386 animations->AddAnimation(CreateAnimation( 1342 player_->AddAnimation(CreateAnimation(
1387 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)), 1343 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)),
1388 1, TargetProperty::OPACITY)); 1344 1, TargetProperty::OPACITY));
1389 animations->Animate(kInitialTickTime); 1345 element_animations_->Animate(kInitialTickTime);
1390 animations->UpdateState(true, events.get()); 1346 element_animations_->UpdateState(true, events.get());
1391 EXPECT_TRUE(animations->HasActiveAnimation()); 1347 EXPECT_TRUE(player_->HasActiveAnimation());
1392 EXPECT_EQ(0.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1348 EXPECT_EQ(0.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1393 1349
1394 std::unique_ptr<Animation> to_add(CreateAnimation( 1350 std::unique_ptr<Animation> to_add(CreateAnimation(
1395 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 1.f, 0.5f)), 1351 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 1.f, 0.5f)),
1396 2, TargetProperty::OPACITY)); 1352 2, TargetProperty::OPACITY));
1397 animations->AbortAnimations(TargetProperty::OPACITY); 1353 player_->AbortAnimations(TargetProperty::OPACITY, false);
1398 animations->AddAnimation(std::move(to_add)); 1354 player_->AddAnimation(std::move(to_add));
1399 1355
1400 // Since the previous animation was aborted, the new animation should start 1356 // Since the previous animation was aborted, the new animation should start
1401 // right in this call to animate. 1357 // right in this call to animate.
1402 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(500)); 1358 element_animations_->Animate(kInitialTickTime +
1403 animations->UpdateState(true, events.get()); 1359 TimeDelta::FromMilliseconds(500));
1404 EXPECT_TRUE(animations->HasActiveAnimation()); 1360 element_animations_->UpdateState(true, events.get());
1361 EXPECT_TRUE(player_->HasActiveAnimation());
1405 EXPECT_EQ(1.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1362 EXPECT_EQ(1.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1406 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1500)); 1363 element_animations_->Animate(kInitialTickTime +
1407 animations->UpdateState(true, events.get()); 1364 TimeDelta::FromMilliseconds(1500));
1365 element_animations_->UpdateState(true, events.get());
1408 EXPECT_EQ(0.5f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1366 EXPECT_EQ(0.5f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1409 EXPECT_FALSE(animations->HasActiveAnimation()); 1367 EXPECT_FALSE(player_->HasActiveAnimation());
1410 } 1368 }
1411 1369
1412 // Tests scheduling two animations to run together when only one property is 1370 // Tests scheduling two animations to run together when only one property is
1413 // free. 1371 // free.
1414 TEST_F(ElementAnimationsTest, ScheduleTogetherWhenAPropertyIsBlocked) { 1372 TEST_F(ElementAnimationsTest, ScheduleTogetherWhenAPropertyIsBlocked) {
1415 CreateTestLayer(false, false); 1373 CreateTestLayer(false, false);
1416 AttachTimelinePlayerLayer(); 1374 AttachTimelinePlayerLayer();
1417 1375
1418 scoped_refptr<ElementAnimations> animations = element_animations();
1419
1420 auto events = host_impl_->CreateEvents(); 1376 auto events = host_impl_->CreateEvents();
1421 1377
1422 animations->AddAnimation(CreateAnimation( 1378 player_->AddAnimation(CreateAnimation(
1423 std::unique_ptr<AnimationCurve>(new FakeTransformTransition(1)), 1, 1379 std::unique_ptr<AnimationCurve>(new FakeTransformTransition(1)), 1,
1424 TargetProperty::TRANSFORM)); 1380 TargetProperty::TRANSFORM));
1425 animations->AddAnimation(CreateAnimation( 1381 player_->AddAnimation(CreateAnimation(
1426 std::unique_ptr<AnimationCurve>(new FakeTransformTransition(1)), 2, 1382 std::unique_ptr<AnimationCurve>(new FakeTransformTransition(1)), 2,
1427 TargetProperty::TRANSFORM)); 1383 TargetProperty::TRANSFORM));
1428 animations->AddAnimation(CreateAnimation( 1384 player_->AddAnimation(CreateAnimation(
1429 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)), 1385 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)),
1430 2, TargetProperty::OPACITY)); 1386 2, TargetProperty::OPACITY));
1431 1387
1432 animations->Animate(kInitialTickTime); 1388 element_animations_->Animate(kInitialTickTime);
1433 animations->UpdateState(true, events.get()); 1389 element_animations_->UpdateState(true, events.get());
1434 EXPECT_EQ(0.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1390 EXPECT_EQ(0.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1435 EXPECT_TRUE(animations->HasActiveAnimation()); 1391 EXPECT_TRUE(player_->HasActiveAnimation());
1436 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1000)); 1392 element_animations_->Animate(kInitialTickTime +
1437 animations->UpdateState(true, events.get()); 1393 TimeDelta::FromMilliseconds(1000));
1394 element_animations_->UpdateState(true, events.get());
1438 // Should not have started the float transition yet. 1395 // Should not have started the float transition yet.
1439 EXPECT_TRUE(animations->HasActiveAnimation()); 1396 EXPECT_TRUE(player_->HasActiveAnimation());
1440 EXPECT_EQ(0.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1397 EXPECT_EQ(0.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1441 // The float animation should have started at time 1 and should be done. 1398 // The float animation should have started at time 1 and should be done.
1442 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(2000)); 1399 element_animations_->Animate(kInitialTickTime +
1443 animations->UpdateState(true, events.get()); 1400 TimeDelta::FromMilliseconds(2000));
1401 element_animations_->UpdateState(true, events.get());
1444 EXPECT_EQ(1.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1402 EXPECT_EQ(1.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1445 EXPECT_FALSE(animations->HasActiveAnimation()); 1403 EXPECT_FALSE(player_->HasActiveAnimation());
1446 } 1404 }
1447 1405
1448 // Tests scheduling two animations to run together with different lengths and 1406 // Tests scheduling two animations to run together with different lengths and
1449 // another animation queued to start when the shorter animation finishes (should 1407 // another animation queued to start when the shorter animation finishes (should
1450 // wait for both to finish). 1408 // wait for both to finish).
1451 TEST_F(ElementAnimationsTest, ScheduleTogetherWithAnAnimWaiting) { 1409 TEST_F(ElementAnimationsTest, ScheduleTogetherWithAnAnimWaiting) {
1452 CreateTestLayer(false, false); 1410 CreateTestLayer(false, false);
1453 AttachTimelinePlayerLayer(); 1411 AttachTimelinePlayerLayer();
1454 1412
1455 scoped_refptr<ElementAnimations> animations = element_animations();
1456
1457 auto events = host_impl_->CreateEvents(); 1413 auto events = host_impl_->CreateEvents();
1458 1414
1459 animations->AddAnimation(CreateAnimation( 1415 player_->AddAnimation(CreateAnimation(
1460 std::unique_ptr<AnimationCurve>(new FakeTransformTransition(2)), 1, 1416 std::unique_ptr<AnimationCurve>(new FakeTransformTransition(2)), 1,
1461 TargetProperty::TRANSFORM)); 1417 TargetProperty::TRANSFORM));
1462 animations->AddAnimation(CreateAnimation( 1418 player_->AddAnimation(CreateAnimation(
1463 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)), 1419 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)),
1464 1, TargetProperty::OPACITY)); 1420 1, TargetProperty::OPACITY));
1465 animations->AddAnimation(CreateAnimation( 1421 player_->AddAnimation(CreateAnimation(
1466 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 1.f, 0.5f)), 1422 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 1.f, 0.5f)),
1467 2, TargetProperty::OPACITY)); 1423 2, TargetProperty::OPACITY));
1468 1424
1469 // Animations with id 1 should both start now. 1425 // Animations with id 1 should both start now.
1470 animations->Animate(kInitialTickTime); 1426 element_animations_->Animate(kInitialTickTime);
1471 animations->UpdateState(true, events.get()); 1427 element_animations_->UpdateState(true, events.get());
1472 EXPECT_TRUE(animations->HasActiveAnimation()); 1428 EXPECT_TRUE(player_->HasActiveAnimation());
1473 EXPECT_EQ(0.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1429 EXPECT_EQ(0.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1474 // The opacity animation should have finished at time 1, but the group 1430 // The opacity animation should have finished at time 1, but the group
1475 // of animations with id 1 don't finish until time 2 because of the length 1431 // of animations with id 1 don't finish until time 2 because of the length
1476 // of the transform animation. 1432 // of the transform animation.
1477 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(2000)); 1433 element_animations_->Animate(kInitialTickTime +
1478 animations->UpdateState(true, events.get()); 1434 TimeDelta::FromMilliseconds(2000));
1435 element_animations_->UpdateState(true, events.get());
1479 // Should not have started the float transition yet. 1436 // Should not have started the float transition yet.
1480 EXPECT_TRUE(animations->HasActiveAnimation()); 1437 EXPECT_TRUE(player_->HasActiveAnimation());
1481 EXPECT_EQ(1.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1438 EXPECT_EQ(1.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1482 1439
1483 // The second opacity animation should start at time 2 and should be done by 1440 // The second opacity animation should start at time 2 and should be done by
1484 // time 3. 1441 // time 3.
1485 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(3000)); 1442 element_animations_->Animate(kInitialTickTime +
1486 animations->UpdateState(true, events.get()); 1443 TimeDelta::FromMilliseconds(3000));
1444 element_animations_->UpdateState(true, events.get());
1487 EXPECT_EQ(0.5f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1445 EXPECT_EQ(0.5f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1488 EXPECT_FALSE(animations->HasActiveAnimation()); 1446 EXPECT_FALSE(player_->HasActiveAnimation());
1489 } 1447 }
1490 1448
1491 // Test that a looping animation loops and for the correct number of iterations. 1449 // Test that a looping animation loops and for the correct number of iterations.
1492 TEST_F(ElementAnimationsTest, TrivialLooping) { 1450 TEST_F(ElementAnimationsTest, TrivialLooping) {
1493 CreateTestLayer(false, false); 1451 CreateTestLayer(false, false);
1494 AttachTimelinePlayerLayer(); 1452 AttachTimelinePlayerLayer();
1495 1453
1496 scoped_refptr<ElementAnimations> animations = element_animations();
1497
1498 auto events = host_impl_->CreateEvents(); 1454 auto events = host_impl_->CreateEvents();
1499 1455
1500 std::unique_ptr<Animation> to_add(CreateAnimation( 1456 std::unique_ptr<Animation> to_add(CreateAnimation(
1501 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)), 1457 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)),
1502 1, TargetProperty::OPACITY)); 1458 1, TargetProperty::OPACITY));
1503 to_add->set_iterations(3); 1459 to_add->set_iterations(3);
1504 animations->AddAnimation(std::move(to_add)); 1460 player_->AddAnimation(std::move(to_add));
1505 1461
1506 animations->Animate(kInitialTickTime); 1462 element_animations_->Animate(kInitialTickTime);
1507 animations->UpdateState(true, events.get()); 1463 element_animations_->UpdateState(true, events.get());
1508 EXPECT_TRUE(animations->HasActiveAnimation()); 1464 EXPECT_TRUE(player_->HasActiveAnimation());
1509 EXPECT_EQ(0.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1465 EXPECT_EQ(0.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1510 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1250)); 1466 element_animations_->Animate(kInitialTickTime +
1511 animations->UpdateState(true, events.get()); 1467 TimeDelta::FromMilliseconds(1250));
1512 EXPECT_TRUE(animations->HasActiveAnimation()); 1468 element_animations_->UpdateState(true, events.get());
1469 EXPECT_TRUE(player_->HasActiveAnimation());
1513 EXPECT_EQ(0.25f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1470 EXPECT_EQ(0.25f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1514 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1750)); 1471 element_animations_->Animate(kInitialTickTime +
1515 animations->UpdateState(true, events.get()); 1472 TimeDelta::FromMilliseconds(1750));
1516 EXPECT_TRUE(animations->HasActiveAnimation()); 1473 element_animations_->UpdateState(true, events.get());
1474 EXPECT_TRUE(player_->HasActiveAnimation());
1517 EXPECT_EQ(0.75f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1475 EXPECT_EQ(0.75f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1518 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(2250)); 1476 element_animations_->Animate(kInitialTickTime +
1519 animations->UpdateState(true, events.get()); 1477 TimeDelta::FromMilliseconds(2250));
1520 EXPECT_TRUE(animations->HasActiveAnimation()); 1478 element_animations_->UpdateState(true, events.get());
1479 EXPECT_TRUE(player_->HasActiveAnimation());
1521 EXPECT_EQ(0.25f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1480 EXPECT_EQ(0.25f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1522 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(2750)); 1481 element_animations_->Animate(kInitialTickTime +
1523 animations->UpdateState(true, events.get()); 1482 TimeDelta::FromMilliseconds(2750));
1524 EXPECT_TRUE(animations->HasActiveAnimation()); 1483 element_animations_->UpdateState(true, events.get());
1484 EXPECT_TRUE(player_->HasActiveAnimation());
1525 EXPECT_EQ(0.75f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1485 EXPECT_EQ(0.75f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1526 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(3000)); 1486 element_animations_->Animate(kInitialTickTime +
1527 animations->UpdateState(true, events.get()); 1487 TimeDelta::FromMilliseconds(3000));
1528 EXPECT_FALSE(animations->HasActiveAnimation()); 1488 element_animations_->UpdateState(true, events.get());
1489 EXPECT_FALSE(player_->HasActiveAnimation());
1529 EXPECT_EQ(1.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1490 EXPECT_EQ(1.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1530 1491
1531 // Just be extra sure. 1492 // Just be extra sure.
1532 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(4000)); 1493 element_animations_->Animate(kInitialTickTime +
1533 animations->UpdateState(true, events.get()); 1494 TimeDelta::FromMilliseconds(4000));
1495 element_animations_->UpdateState(true, events.get());
1534 EXPECT_EQ(1.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1496 EXPECT_EQ(1.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1535 } 1497 }
1536 1498
1537 // Test that an infinitely looping animation does indeed go until aborted. 1499 // Test that an infinitely looping animation does indeed go until aborted.
1538 TEST_F(ElementAnimationsTest, InfiniteLooping) { 1500 TEST_F(ElementAnimationsTest, InfiniteLooping) {
1539 CreateTestLayer(false, false); 1501 CreateTestLayer(false, false);
1540 AttachTimelinePlayerLayer(); 1502 AttachTimelinePlayerLayer();
1541 1503
1542 scoped_refptr<ElementAnimations> animations = element_animations();
1543
1544 auto events = host_impl_->CreateEvents(); 1504 auto events = host_impl_->CreateEvents();
1545 1505
1546 std::unique_ptr<Animation> to_add(CreateAnimation( 1506 std::unique_ptr<Animation> to_add(CreateAnimation(
1547 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)), 1507 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)),
1548 1, TargetProperty::OPACITY)); 1508 1, TargetProperty::OPACITY));
1549 to_add->set_iterations(-1); 1509 to_add->set_iterations(-1);
1550 animations->AddAnimation(std::move(to_add)); 1510 player_->AddAnimation(std::move(to_add));
1551 1511
1552 animations->Animate(kInitialTickTime); 1512 element_animations_->Animate(kInitialTickTime);
1553 animations->UpdateState(true, events.get()); 1513 element_animations_->UpdateState(true, events.get());
1554 EXPECT_TRUE(animations->HasActiveAnimation()); 1514 EXPECT_TRUE(player_->HasActiveAnimation());
1555 EXPECT_EQ(0.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1515 EXPECT_EQ(0.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1556 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1250)); 1516 element_animations_->Animate(kInitialTickTime +
1557 animations->UpdateState(true, events.get()); 1517 TimeDelta::FromMilliseconds(1250));
1558 EXPECT_TRUE(animations->HasActiveAnimation()); 1518 element_animations_->UpdateState(true, events.get());
1519 EXPECT_TRUE(player_->HasActiveAnimation());
1559 EXPECT_EQ(0.25f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1520 EXPECT_EQ(0.25f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1560 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1750)); 1521 element_animations_->Animate(kInitialTickTime +
1561 animations->UpdateState(true, events.get()); 1522 TimeDelta::FromMilliseconds(1750));
1562 EXPECT_TRUE(animations->HasActiveAnimation()); 1523 element_animations_->UpdateState(true, events.get());
1524 EXPECT_TRUE(player_->HasActiveAnimation());
1563 EXPECT_EQ(0.75f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1525 EXPECT_EQ(0.75f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1564 1526
1565 animations->Animate(kInitialTickTime + 1527 element_animations_->Animate(kInitialTickTime +
1566 TimeDelta::FromMilliseconds(1073741824250)); 1528 TimeDelta::FromMilliseconds(1073741824250));
1567 animations->UpdateState(true, events.get()); 1529 element_animations_->UpdateState(true, events.get());
1568 EXPECT_TRUE(animations->HasActiveAnimation()); 1530 EXPECT_TRUE(player_->HasActiveAnimation());
1569 EXPECT_EQ(0.25f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1531 EXPECT_EQ(0.25f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1570 animations->Animate(kInitialTickTime + 1532 element_animations_->Animate(kInitialTickTime +
1571 TimeDelta::FromMilliseconds(1073741824750)); 1533 TimeDelta::FromMilliseconds(1073741824750));
1572 animations->UpdateState(true, events.get()); 1534 element_animations_->UpdateState(true, events.get());
1573 EXPECT_TRUE(animations->HasActiveAnimation()); 1535 EXPECT_TRUE(player_->HasActiveAnimation());
1574 EXPECT_EQ(0.75f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1536 EXPECT_EQ(0.75f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1575 1537
1576 EXPECT_TRUE(animations->GetAnimation(TargetProperty::OPACITY)); 1538 EXPECT_TRUE(player_->GetAnimation(TargetProperty::OPACITY));
1577 animations->GetAnimation(TargetProperty::OPACITY) 1539 player_->GetAnimation(TargetProperty::OPACITY)
1578 ->SetRunState(Animation::ABORTED, 1540 ->SetRunState(Animation::ABORTED,
1579 kInitialTickTime + TimeDelta::FromMilliseconds(750)); 1541 kInitialTickTime + TimeDelta::FromMilliseconds(750));
1580 EXPECT_FALSE(animations->HasActiveAnimation()); 1542 EXPECT_FALSE(player_->HasActiveAnimation());
1581 EXPECT_EQ(0.75f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1543 EXPECT_EQ(0.75f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1582 } 1544 }
1583 1545
1584 // Test that pausing and resuming work as expected. 1546 // Test that pausing and resuming work as expected.
1585 TEST_F(ElementAnimationsTest, PauseResume) { 1547 TEST_F(ElementAnimationsTest, PauseResume) {
1586 CreateTestLayer(false, false); 1548 CreateTestLayer(false, false);
1587 AttachTimelinePlayerLayer(); 1549 AttachTimelinePlayerLayer();
1588 1550
1589 scoped_refptr<ElementAnimations> animations = element_animations();
1590
1591 auto events = host_impl_->CreateEvents(); 1551 auto events = host_impl_->CreateEvents();
1592 1552
1593 animations->AddAnimation(CreateAnimation( 1553 player_->AddAnimation(CreateAnimation(
1594 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)), 1554 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)),
1595 1, TargetProperty::OPACITY)); 1555 1, TargetProperty::OPACITY));
1596 1556
1597 animations->Animate(kInitialTickTime); 1557 element_animations_->Animate(kInitialTickTime);
1598 animations->UpdateState(true, events.get()); 1558 element_animations_->UpdateState(true, events.get());
1599 EXPECT_TRUE(animations->HasActiveAnimation()); 1559 EXPECT_TRUE(player_->HasActiveAnimation());
1600 EXPECT_EQ(0.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1560 EXPECT_EQ(0.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1601 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(500)); 1561 element_animations_->Animate(kInitialTickTime +
1602 animations->UpdateState(true, events.get()); 1562 TimeDelta::FromMilliseconds(500));
1603 EXPECT_TRUE(animations->HasActiveAnimation()); 1563 element_animations_->UpdateState(true, events.get());
1564 EXPECT_TRUE(player_->HasActiveAnimation());
1604 EXPECT_EQ(0.5f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1565 EXPECT_EQ(0.5f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1605 1566
1606 EXPECT_TRUE(animations->GetAnimation(TargetProperty::OPACITY)); 1567 EXPECT_TRUE(player_->GetAnimation(TargetProperty::OPACITY));
1607 animations->GetAnimation(TargetProperty::OPACITY) 1568 player_->GetAnimation(TargetProperty::OPACITY)
1608 ->SetRunState(Animation::PAUSED, 1569 ->SetRunState(Animation::PAUSED,
1609 kInitialTickTime + TimeDelta::FromMilliseconds(500)); 1570 kInitialTickTime + TimeDelta::FromMilliseconds(500));
1610 1571
1611 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1024000)); 1572 element_animations_->Animate(kInitialTickTime +
1612 animations->UpdateState(true, events.get()); 1573 TimeDelta::FromMilliseconds(1024000));
1613 EXPECT_TRUE(animations->HasActiveAnimation()); 1574 element_animations_->UpdateState(true, events.get());
1575 EXPECT_TRUE(player_->HasActiveAnimation());
1614 EXPECT_EQ(0.5f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1576 EXPECT_EQ(0.5f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1615 1577
1616 EXPECT_TRUE(animations->GetAnimation(TargetProperty::OPACITY)); 1578 EXPECT_TRUE(player_->GetAnimation(TargetProperty::OPACITY));
1617 animations->GetAnimation(TargetProperty::OPACITY) 1579 player_->GetAnimation(TargetProperty::OPACITY)
1618 ->SetRunState(Animation::RUNNING, 1580 ->SetRunState(Animation::RUNNING,
1619 kInitialTickTime + TimeDelta::FromMilliseconds(1024000)); 1581 kInitialTickTime + TimeDelta::FromMilliseconds(1024000));
1620 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1024250)); 1582 element_animations_->Animate(kInitialTickTime +
1621 animations->UpdateState(true, events.get()); 1583 TimeDelta::FromMilliseconds(1024250));
1622 EXPECT_TRUE(animations->HasActiveAnimation()); 1584 element_animations_->UpdateState(true, events.get());
1585 EXPECT_TRUE(player_->HasActiveAnimation());
1623 EXPECT_EQ(0.75f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1586 EXPECT_EQ(0.75f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1624 1587
1625 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1024500)); 1588 element_animations_->Animate(kInitialTickTime +
1626 animations->UpdateState(true, events.get()); 1589 TimeDelta::FromMilliseconds(1024500));
1627 EXPECT_FALSE(animations->HasActiveAnimation()); 1590 element_animations_->UpdateState(true, events.get());
1591 EXPECT_FALSE(player_->HasActiveAnimation());
1628 EXPECT_EQ(1.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1592 EXPECT_EQ(1.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1629 } 1593 }
1630 1594
1631 TEST_F(ElementAnimationsTest, AbortAGroupedAnimation) { 1595 TEST_F(ElementAnimationsTest, AbortAGroupedAnimation) {
1632 CreateTestLayer(false, false); 1596 CreateTestLayer(false, false);
1633 AttachTimelinePlayerLayer(); 1597 AttachTimelinePlayerLayer();
1634 1598
1635 scoped_refptr<ElementAnimations> animations = element_animations();
1636
1637 auto events = host_impl_->CreateEvents(); 1599 auto events = host_impl_->CreateEvents();
1638 1600
1639 const int animation_id = 2; 1601 const int animation_id = 2;
1640 animations->AddAnimation(Animation::Create( 1602 player_->AddAnimation(Animation::Create(
1641 std::unique_ptr<AnimationCurve>(new FakeTransformTransition(1)), 1, 1, 1603 std::unique_ptr<AnimationCurve>(new FakeTransformTransition(1)), 1, 1,
1642 TargetProperty::TRANSFORM)); 1604 TargetProperty::TRANSFORM));
1643 animations->AddAnimation(Animation::Create( 1605 player_->AddAnimation(Animation::Create(
1644 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(2.0, 0.f, 1.f)), 1606 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(2.0, 0.f, 1.f)),
1645 animation_id, 1, TargetProperty::OPACITY)); 1607 animation_id, 1, TargetProperty::OPACITY));
1646 animations->AddAnimation(Animation::Create( 1608 player_->AddAnimation(Animation::Create(
1647 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 1.f, 0.75f)), 1609 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 1.f, 0.75f)),
1648 3, 2, TargetProperty::OPACITY)); 1610 3, 2, TargetProperty::OPACITY));
1649 1611
1650 animations->Animate(kInitialTickTime); 1612 element_animations_->Animate(kInitialTickTime);
1651 animations->UpdateState(true, events.get()); 1613 element_animations_->UpdateState(true, events.get());
1652 EXPECT_TRUE(animations->HasActiveAnimation()); 1614 EXPECT_TRUE(player_->HasActiveAnimation());
1653 EXPECT_EQ(0.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1615 EXPECT_EQ(0.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1654 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1000)); 1616 element_animations_->Animate(kInitialTickTime +
1655 animations->UpdateState(true, events.get()); 1617 TimeDelta::FromMilliseconds(1000));
1656 EXPECT_TRUE(animations->HasActiveAnimation()); 1618 element_animations_->UpdateState(true, events.get());
1619 EXPECT_TRUE(player_->HasActiveAnimation());
1657 EXPECT_EQ(0.5f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1620 EXPECT_EQ(0.5f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1658 1621
1659 EXPECT_TRUE(animations->GetAnimationById(animation_id)); 1622 EXPECT_TRUE(player_->GetAnimationById(animation_id));
1660 animations->GetAnimationById(animation_id) 1623 player_->GetAnimationById(animation_id)
1661 ->SetRunState(Animation::ABORTED, 1624 ->SetRunState(Animation::ABORTED,
1662 kInitialTickTime + TimeDelta::FromMilliseconds(1000)); 1625 kInitialTickTime + TimeDelta::FromMilliseconds(1000));
1663 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1000)); 1626 element_animations_->Animate(kInitialTickTime +
1664 animations->UpdateState(true, events.get()); 1627 TimeDelta::FromMilliseconds(1000));
1665 EXPECT_TRUE(animations->HasActiveAnimation()); 1628 element_animations_->UpdateState(true, events.get());
1629 EXPECT_TRUE(player_->HasActiveAnimation());
1666 EXPECT_EQ(1.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1630 EXPECT_EQ(1.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1667 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(2000)); 1631 element_animations_->Animate(kInitialTickTime +
1668 animations->UpdateState(true, events.get()); 1632 TimeDelta::FromMilliseconds(2000));
1669 EXPECT_TRUE(!animations->HasActiveAnimation()); 1633 element_animations_->UpdateState(true, events.get());
1634 EXPECT_TRUE(!player_->HasActiveAnimation());
1670 EXPECT_EQ(0.75f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1635 EXPECT_EQ(0.75f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1671 } 1636 }
1672 1637
1673 TEST_F(ElementAnimationsTest, PushUpdatesWhenSynchronizedStartTimeNeeded) { 1638 TEST_F(ElementAnimationsTest, PushUpdatesWhenSynchronizedStartTimeNeeded) {
1674 CreateTestLayer(true, false); 1639 CreateTestLayer(true, false);
1675 AttachTimelinePlayerLayer(); 1640 AttachTimelinePlayerLayer();
1676 CreateImplTimelineAndPlayer(); 1641 CreateImplTimelineAndPlayer();
1677 1642
1678 scoped_refptr<ElementAnimations> animations = element_animations();
1679 scoped_refptr<ElementAnimations> animations_impl = element_animations_impl();
1680
1681 auto events = host_impl_->CreateEvents(); 1643 auto events = host_impl_->CreateEvents();
1682 1644
1683 std::unique_ptr<Animation> to_add(CreateAnimation( 1645 std::unique_ptr<Animation> to_add(CreateAnimation(
1684 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(2.0, 0.f, 1.f)), 1646 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(2.0, 0.f, 1.f)),
1685 0, TargetProperty::OPACITY)); 1647 0, TargetProperty::OPACITY));
1686 to_add->set_needs_synchronized_start_time(true); 1648 to_add->set_needs_synchronized_start_time(true);
1687 animations->AddAnimation(std::move(to_add)); 1649 player_->AddAnimation(std::move(to_add));
1688 1650
1689 animations->Animate(kInitialTickTime); 1651 element_animations_->Animate(kInitialTickTime);
1690 animations->UpdateState(true, events.get()); 1652 element_animations_->UpdateState(true, events.get());
1691 EXPECT_TRUE(animations->HasActiveAnimation()); 1653 EXPECT_TRUE(player_->HasActiveAnimation());
1692 Animation* active_animation = 1654 Animation* active_animation = player_->GetAnimation(TargetProperty::OPACITY);
1693 animations->GetAnimation(TargetProperty::OPACITY);
1694 EXPECT_TRUE(active_animation); 1655 EXPECT_TRUE(active_animation);
1695 EXPECT_TRUE(active_animation->needs_synchronized_start_time()); 1656 EXPECT_TRUE(active_animation->needs_synchronized_start_time());
1696 1657
1697 EXPECT_TRUE(animations->needs_push_properties()); 1658 EXPECT_TRUE(player_->needs_push_properties());
1698 PushProperties(); 1659 PushProperties();
1699 animations_impl->ActivateAnimations(); 1660 player_impl_->ActivateAnimations();
1700 1661
1701 active_animation = animations_impl->GetAnimation(TargetProperty::OPACITY); 1662 active_animation = player_impl_->GetAnimation(TargetProperty::OPACITY);
1702 EXPECT_TRUE(active_animation); 1663 EXPECT_TRUE(active_animation);
1703 EXPECT_EQ(Animation::WAITING_FOR_TARGET_AVAILABILITY, 1664 EXPECT_EQ(Animation::WAITING_FOR_TARGET_AVAILABILITY,
1704 active_animation->run_state()); 1665 active_animation->run_state());
1705 } 1666 }
1706 1667
1707 // Tests that skipping a call to UpdateState works as expected. 1668 // Tests that skipping a call to UpdateState works as expected.
1708 TEST_F(ElementAnimationsTest, SkipUpdateState) { 1669 TEST_F(ElementAnimationsTest, SkipUpdateState) {
1709 CreateTestLayer(true, false); 1670 CreateTestLayer(true, false);
1710 AttachTimelinePlayerLayer(); 1671 AttachTimelinePlayerLayer();
1711 1672
1712 scoped_refptr<ElementAnimations> animations = element_animations();
1713
1714 auto events = host_impl_->CreateEvents(); 1673 auto events = host_impl_->CreateEvents();
1715 1674
1716 std::unique_ptr<Animation> first_animation(CreateAnimation( 1675 std::unique_ptr<Animation> first_animation(CreateAnimation(
1717 std::unique_ptr<AnimationCurve>(new FakeTransformTransition(1)), 1, 1676 std::unique_ptr<AnimationCurve>(new FakeTransformTransition(1)), 1,
1718 TargetProperty::TRANSFORM)); 1677 TargetProperty::TRANSFORM));
1719 first_animation->set_is_controlling_instance_for_test(true); 1678 first_animation->set_is_controlling_instance_for_test(true);
1720 animations->AddAnimation(std::move(first_animation)); 1679 player_->AddAnimation(std::move(first_animation));
1721 1680
1722 animations->Animate(kInitialTickTime); 1681 element_animations_->Animate(kInitialTickTime);
1723 animations->UpdateState(true, events.get()); 1682 element_animations_->UpdateState(true, events.get());
1724 1683
1725 std::unique_ptr<Animation> second_animation(CreateAnimation( 1684 std::unique_ptr<Animation> second_animation(CreateAnimation(
1726 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)), 1685 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)),
1727 2, TargetProperty::OPACITY)); 1686 2, TargetProperty::OPACITY));
1728 second_animation->set_is_controlling_instance_for_test(true); 1687 second_animation->set_is_controlling_instance_for_test(true);
1729 animations->AddAnimation(std::move(second_animation)); 1688 player_->AddAnimation(std::move(second_animation));
1730 1689
1731 // Animate but don't UpdateState. 1690 // Animate but don't UpdateState.
1732 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1000)); 1691 element_animations_->Animate(kInitialTickTime +
1692 TimeDelta::FromMilliseconds(1000));
1733 1693
1734 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(2000)); 1694 element_animations_->Animate(kInitialTickTime +
1695 TimeDelta::FromMilliseconds(2000));
1735 events = host_impl_->CreateEvents(); 1696 events = host_impl_->CreateEvents();
1736 animations->UpdateState(true, events.get()); 1697 element_animations_->UpdateState(true, events.get());
1737 1698
1738 // Should have one STARTED event and one FINISHED event. 1699 // Should have one STARTED event and one FINISHED event.
1739 EXPECT_EQ(2u, events->events_.size()); 1700 EXPECT_EQ(2u, events->events_.size());
1740 EXPECT_NE(events->events_[0].type, events->events_[1].type); 1701 EXPECT_NE(events->events_[0].type, events->events_[1].type);
1741 1702
1742 // The float transition should still be at its starting point. 1703 // The float transition should still be at its starting point.
1743 EXPECT_TRUE(animations->HasActiveAnimation()); 1704 EXPECT_TRUE(player_->HasActiveAnimation());
1744 EXPECT_EQ(0.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1705 EXPECT_EQ(0.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1745 1706
1746 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(3000)); 1707 element_animations_->Animate(kInitialTickTime +
1747 animations->UpdateState(true, events.get()); 1708 TimeDelta::FromMilliseconds(3000));
1709 element_animations_->UpdateState(true, events.get());
1748 1710
1749 // The float tranisition should now be done. 1711 // The float tranisition should now be done.
1750 EXPECT_EQ(1.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1712 EXPECT_EQ(1.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
1751 EXPECT_FALSE(animations->HasActiveAnimation()); 1713 EXPECT_FALSE(player_->HasActiveAnimation());
1752 } 1714 }
1753 1715
1754 // Tests that an animation animations with only a pending observer gets ticked 1716 // Tests that an animation animations with only a pending observer gets ticked
1755 // but doesn't progress animations past the STARTING state. 1717 // but doesn't progress animations past the STARTING state.
1756 TEST_F(ElementAnimationsTest, InactiveObserverGetsTicked) { 1718 TEST_F(ElementAnimationsTest, InactiveObserverGetsTicked) {
1757 AttachTimelinePlayerLayer(); 1719 AttachTimelinePlayerLayer();
1758 CreateImplTimelineAndPlayer(); 1720 CreateImplTimelineAndPlayer();
1759 1721
1760 scoped_refptr<ElementAnimations> animations = element_animations_impl();
1761
1762 auto events = host_impl_->CreateEvents(); 1722 auto events = host_impl_->CreateEvents();
1763 1723
1764 const int id = 1; 1724 const int id = 1;
1765 animations->AddAnimation(CreateAnimation( 1725 player_impl_->AddAnimation(CreateAnimation(
1766 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.5f, 1.f)), 1726 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.5f, 1.f)),
1767 id, TargetProperty::OPACITY)); 1727 id, TargetProperty::OPACITY));
1768 1728
1769 // Without an observer, the animation shouldn't progress to the STARTING 1729 // Without an observer, the animation shouldn't progress to the STARTING
1770 // state. 1730 // state.
1771 animations->Animate(kInitialTickTime); 1731 element_animations_impl_->Animate(kInitialTickTime);
1772 animations->UpdateState(true, events.get()); 1732 element_animations_impl_->UpdateState(true, events.get());
1773 EXPECT_EQ(0u, events->events_.size()); 1733 EXPECT_EQ(0u, events->events_.size());
1774 EXPECT_EQ(Animation::WAITING_FOR_TARGET_AVAILABILITY, 1734 EXPECT_EQ(Animation::WAITING_FOR_TARGET_AVAILABILITY,
1775 animations->GetAnimation(TargetProperty::OPACITY)->run_state()); 1735 player_impl_->GetAnimation(TargetProperty::OPACITY)->run_state());
1776 1736
1777 CreateTestImplLayer(ElementListType::PENDING); 1737 CreateTestImplLayer(ElementListType::PENDING);
1778 1738
1779 // With only a pending observer, the animation should progress to the 1739 // With only a pending observer, the animation should progress to the
1780 // STARTING state and get ticked at its starting point, but should not 1740 // STARTING state and get ticked at its starting point, but should not
1781 // progress to RUNNING. 1741 // progress to RUNNING.
1782 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1000)); 1742 element_animations_impl_->Animate(kInitialTickTime +
1783 animations->UpdateState(true, events.get()); 1743 TimeDelta::FromMilliseconds(1000));
1744 element_animations_impl_->UpdateState(true, events.get());
1784 EXPECT_EQ(0u, events->events_.size()); 1745 EXPECT_EQ(0u, events->events_.size());
1785 EXPECT_EQ(Animation::STARTING, 1746 EXPECT_EQ(Animation::STARTING,
1786 animations->GetAnimation(TargetProperty::OPACITY)->run_state()); 1747 player_impl_->GetAnimation(TargetProperty::OPACITY)->run_state());
1787 EXPECT_EQ(0.5f, 1748 EXPECT_EQ(0.5f,
1788 client_impl_.GetOpacity(element_id_, ElementListType::PENDING)); 1749 client_impl_.GetOpacity(element_id_, ElementListType::PENDING));
1789 1750
1790 // Even when already in the STARTING state, the animation should stay 1751 // Even when already in the STARTING state, the animation should stay
1791 // there, and shouldn't be ticked past its starting point. 1752 // there, and shouldn't be ticked past its starting point.
1792 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(2000)); 1753 element_animations_impl_->Animate(kInitialTickTime +
1793 animations->UpdateState(true, events.get()); 1754 TimeDelta::FromMilliseconds(2000));
1755 element_animations_impl_->UpdateState(true, events.get());
1794 EXPECT_EQ(0u, events->events_.size()); 1756 EXPECT_EQ(0u, events->events_.size());
1795 EXPECT_EQ(Animation::STARTING, 1757 EXPECT_EQ(Animation::STARTING,
1796 animations->GetAnimation(TargetProperty::OPACITY)->run_state()); 1758 player_impl_->GetAnimation(TargetProperty::OPACITY)->run_state());
1797 EXPECT_EQ(0.5f, 1759 EXPECT_EQ(0.5f,
1798 client_impl_.GetOpacity(element_id_, ElementListType::PENDING)); 1760 client_impl_.GetOpacity(element_id_, ElementListType::PENDING));
1799 1761
1800 CreateTestImplLayer(ElementListType::ACTIVE); 1762 CreateTestImplLayer(ElementListType::ACTIVE);
1801 1763
1802 // Now that an active observer has been added, the animation should still 1764 // Now that an active observer has been added, the animation should still
1803 // initially tick at its starting point, but should now progress to RUNNING. 1765 // initially tick at its starting point, but should now progress to RUNNING.
1804 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(3000)); 1766 element_animations_impl_->Animate(kInitialTickTime +
1805 animations->UpdateState(true, events.get()); 1767 TimeDelta::FromMilliseconds(3000));
1768 element_animations_impl_->UpdateState(true, events.get());
1806 EXPECT_EQ(1u, events->events_.size()); 1769 EXPECT_EQ(1u, events->events_.size());
1807 EXPECT_EQ(Animation::RUNNING, 1770 EXPECT_EQ(Animation::RUNNING,
1808 animations->GetAnimation(TargetProperty::OPACITY)->run_state()); 1771 player_impl_->GetAnimation(TargetProperty::OPACITY)->run_state());
1809 EXPECT_EQ(0.5f, 1772 EXPECT_EQ(0.5f,
1810 client_impl_.GetOpacity(element_id_, ElementListType::PENDING)); 1773 client_impl_.GetOpacity(element_id_, ElementListType::PENDING));
1811 EXPECT_EQ(0.5f, 1774 EXPECT_EQ(0.5f,
1812 client_impl_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1775 client_impl_.GetOpacity(element_id_, ElementListType::ACTIVE));
1813 1776
1814 // The animation should now tick past its starting point. 1777 // The animation should now tick past its starting point.
1815 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(3500)); 1778 element_animations_impl_->Animate(kInitialTickTime +
1779 TimeDelta::FromMilliseconds(3500));
1816 EXPECT_NE(0.5f, 1780 EXPECT_NE(0.5f,
1817 client_impl_.GetOpacity(element_id_, ElementListType::PENDING)); 1781 client_impl_.GetOpacity(element_id_, ElementListType::PENDING));
1818 EXPECT_NE(0.5f, 1782 EXPECT_NE(0.5f,
1819 client_impl_.GetOpacity(element_id_, ElementListType::ACTIVE)); 1783 client_impl_.GetOpacity(element_id_, ElementListType::ACTIVE));
1820 } 1784 }
1821 1785
1822 TEST_F(ElementAnimationsTest, TransformAnimationBounds) { 1786 TEST_F(ElementAnimationsTest, TransformAnimationBounds) {
1823 AttachTimelinePlayerLayer(); 1787 AttachTimelinePlayerLayer();
1824 CreateImplTimelineAndPlayer(); 1788 CreateImplTimelineAndPlayer();
1825 1789
1826 scoped_refptr<ElementAnimations> animations_impl = element_animations_impl();
1827
1828 std::unique_ptr<KeyframedTransformAnimationCurve> curve1( 1790 std::unique_ptr<KeyframedTransformAnimationCurve> curve1(
1829 KeyframedTransformAnimationCurve::Create()); 1791 KeyframedTransformAnimationCurve::Create());
1830 1792
1831 TransformOperations operations1; 1793 TransformOperations operations1;
1832 curve1->AddKeyframe( 1794 curve1->AddKeyframe(
1833 TransformKeyframe::Create(base::TimeDelta(), operations1, nullptr)); 1795 TransformKeyframe::Create(base::TimeDelta(), operations1, nullptr));
1834 operations1.AppendTranslate(10.0, 15.0, 0.0); 1796 operations1.AppendTranslate(10.0, 15.0, 0.0);
1835 curve1->AddKeyframe(TransformKeyframe::Create( 1797 curve1->AddKeyframe(TransformKeyframe::Create(
1836 base::TimeDelta::FromSecondsD(1.0), operations1, nullptr)); 1798 base::TimeDelta::FromSecondsD(1.0), operations1, nullptr));
1837 1799
1838 std::unique_ptr<Animation> animation( 1800 std::unique_ptr<Animation> animation(
1839 Animation::Create(std::move(curve1), 1, 1, TargetProperty::TRANSFORM)); 1801 Animation::Create(std::move(curve1), 1, 1, TargetProperty::TRANSFORM));
1840 animations_impl->AddAnimation(std::move(animation)); 1802 player_impl_->AddAnimation(std::move(animation));
1841 1803
1842 std::unique_ptr<KeyframedTransformAnimationCurve> curve2( 1804 std::unique_ptr<KeyframedTransformAnimationCurve> curve2(
1843 KeyframedTransformAnimationCurve::Create()); 1805 KeyframedTransformAnimationCurve::Create());
1844 1806
1845 TransformOperations operations2; 1807 TransformOperations operations2;
1846 curve2->AddKeyframe( 1808 curve2->AddKeyframe(
1847 TransformKeyframe::Create(base::TimeDelta(), operations2, nullptr)); 1809 TransformKeyframe::Create(base::TimeDelta(), operations2, nullptr));
1848 operations2.AppendScale(2.0, 3.0, 4.0); 1810 operations2.AppendScale(2.0, 3.0, 4.0);
1849 curve2->AddKeyframe(TransformKeyframe::Create( 1811 curve2->AddKeyframe(TransformKeyframe::Create(
1850 base::TimeDelta::FromSecondsD(1.0), operations2, nullptr)); 1812 base::TimeDelta::FromSecondsD(1.0), operations2, nullptr));
1851 1813
1852 animation = 1814 animation =
1853 Animation::Create(std::move(curve2), 2, 2, TargetProperty::TRANSFORM); 1815 Animation::Create(std::move(curve2), 2, 2, TargetProperty::TRANSFORM);
1854 animations_impl->AddAnimation(std::move(animation)); 1816 player_impl_->AddAnimation(std::move(animation));
1855 1817
1856 gfx::BoxF box(1.f, 2.f, -1.f, 3.f, 4.f, 5.f); 1818 gfx::BoxF box(1.f, 2.f, -1.f, 3.f, 4.f, 5.f);
1857 gfx::BoxF bounds; 1819 gfx::BoxF bounds;
1858 1820
1859 EXPECT_TRUE(animations_impl->TransformAnimationBoundsForBox(box, &bounds)); 1821 EXPECT_TRUE(player_impl_->TransformAnimationBoundsForBox(box, &bounds));
1860 EXPECT_EQ(gfx::BoxF(1.f, 2.f, -4.f, 13.f, 19.f, 20.f).ToString(), 1822 EXPECT_EQ(gfx::BoxF(1.f, 2.f, -4.f, 13.f, 19.f, 20.f).ToString(),
1861 bounds.ToString()); 1823 bounds.ToString());
1862 1824
1863 animations_impl->GetAnimationById(1)->SetRunState(Animation::FINISHED, 1825 player_impl_->GetAnimationById(1)->SetRunState(Animation::FINISHED,
1864 TicksFromSecondsF(0.0)); 1826 TicksFromSecondsF(0.0));
1865 1827
1866 // Only the unfinished animation should affect the animated bounds. 1828 // Only the unfinished animation should affect the animated bounds.
1867 EXPECT_TRUE(animations_impl->TransformAnimationBoundsForBox(box, &bounds)); 1829 EXPECT_TRUE(player_impl_->TransformAnimationBoundsForBox(box, &bounds));
1868 EXPECT_EQ(gfx::BoxF(1.f, 2.f, -4.f, 7.f, 16.f, 20.f).ToString(), 1830 EXPECT_EQ(gfx::BoxF(1.f, 2.f, -4.f, 7.f, 16.f, 20.f).ToString(),
1869 bounds.ToString()); 1831 bounds.ToString());
1870 1832
1871 animations_impl->GetAnimationById(2)->SetRunState(Animation::FINISHED, 1833 player_impl_->GetAnimationById(2)->SetRunState(Animation::FINISHED,
1872 TicksFromSecondsF(0.0)); 1834 TicksFromSecondsF(0.0));
1873 1835
1874 // There are no longer any running animations. 1836 // There are no longer any running animations.
1875 EXPECT_FALSE(animations_impl->HasTransformAnimationThatInflatesBounds()); 1837 EXPECT_FALSE(player_impl_->HasTransformAnimationThatInflatesBounds());
1876 1838
1877 // Add an animation whose bounds we don't yet support computing. 1839 // Add an animation whose bounds we don't yet support computing.
1878 std::unique_ptr<KeyframedTransformAnimationCurve> curve3( 1840 std::unique_ptr<KeyframedTransformAnimationCurve> curve3(
1879 KeyframedTransformAnimationCurve::Create()); 1841 KeyframedTransformAnimationCurve::Create());
1880 TransformOperations operations3; 1842 TransformOperations operations3;
1881 gfx::Transform transform3; 1843 gfx::Transform transform3;
1882 transform3.Scale3d(1.0, 2.0, 3.0); 1844 transform3.Scale3d(1.0, 2.0, 3.0);
1883 curve3->AddKeyframe( 1845 curve3->AddKeyframe(
1884 TransformKeyframe::Create(base::TimeDelta(), operations3, nullptr)); 1846 TransformKeyframe::Create(base::TimeDelta(), operations3, nullptr));
1885 operations3.AppendMatrix(transform3); 1847 operations3.AppendMatrix(transform3);
1886 curve3->AddKeyframe(TransformKeyframe::Create( 1848 curve3->AddKeyframe(TransformKeyframe::Create(
1887 base::TimeDelta::FromSecondsD(1.0), operations3, nullptr)); 1849 base::TimeDelta::FromSecondsD(1.0), operations3, nullptr));
1888 animation = 1850 animation =
1889 Animation::Create(std::move(curve3), 3, 3, TargetProperty::TRANSFORM); 1851 Animation::Create(std::move(curve3), 3, 3, TargetProperty::TRANSFORM);
1890 animations_impl->AddAnimation(std::move(animation)); 1852 player_impl_->AddAnimation(std::move(animation));
1891 EXPECT_FALSE(animations_impl->TransformAnimationBoundsForBox(box, &bounds)); 1853 EXPECT_FALSE(player_impl_->TransformAnimationBoundsForBox(box, &bounds));
1892 } 1854 }
1893 1855
1894 // Tests that AbortAnimations aborts all animations targeting the specified 1856 // Tests that AbortAnimations aborts all animations targeting the specified
1895 // property. 1857 // property.
1896 TEST_F(ElementAnimationsTest, AbortAnimations) { 1858 TEST_F(ElementAnimationsTest, AbortAnimations) {
1897 CreateTestLayer(false, false); 1859 CreateTestLayer(false, false);
1898 AttachTimelinePlayerLayer(); 1860 AttachTimelinePlayerLayer();
1899 1861
1900 scoped_refptr<ElementAnimations> animations = element_animations();
1901
1902 // Start with several animations, and allow some of them to reach the finished 1862 // Start with several animations, and allow some of them to reach the finished
1903 // state. 1863 // state.
1904 animations->AddAnimation(Animation::Create( 1864 player_->AddAnimation(Animation::Create(
1905 std::unique_ptr<AnimationCurve>(new FakeTransformTransition(1.0)), 1, 1, 1865 std::unique_ptr<AnimationCurve>(new FakeTransformTransition(1.0)), 1, 1,
1906 TargetProperty::TRANSFORM)); 1866 TargetProperty::TRANSFORM));
1907 animations->AddAnimation(Animation::Create( 1867 player_->AddAnimation(Animation::Create(
1908 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)), 1868 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)),
1909 2, 2, TargetProperty::OPACITY)); 1869 2, 2, TargetProperty::OPACITY));
1910 animations->AddAnimation(Animation::Create( 1870 player_->AddAnimation(Animation::Create(
1911 std::unique_ptr<AnimationCurve>(new FakeTransformTransition(1.0)), 3, 3, 1871 std::unique_ptr<AnimationCurve>(new FakeTransformTransition(1.0)), 3, 3,
1912 TargetProperty::TRANSFORM)); 1872 TargetProperty::TRANSFORM));
1913 animations->AddAnimation(Animation::Create( 1873 player_->AddAnimation(Animation::Create(
1914 std::unique_ptr<AnimationCurve>(new FakeTransformTransition(2.0)), 4, 4, 1874 std::unique_ptr<AnimationCurve>(new FakeTransformTransition(2.0)), 4, 4,
1915 TargetProperty::TRANSFORM)); 1875 TargetProperty::TRANSFORM));
1916 animations->AddAnimation(Animation::Create( 1876 player_->AddAnimation(Animation::Create(
1917 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)), 1877 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)),
1918 5, 5, TargetProperty::OPACITY)); 1878 5, 5, TargetProperty::OPACITY));
1919 1879
1920 animations->Animate(kInitialTickTime); 1880 element_animations_->Animate(kInitialTickTime);
1921 animations->UpdateState(true, nullptr); 1881 element_animations_->UpdateState(true, nullptr);
1922 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1000)); 1882 element_animations_->Animate(kInitialTickTime +
1923 animations->UpdateState(true, nullptr); 1883 TimeDelta::FromMilliseconds(1000));
1884 element_animations_->UpdateState(true, nullptr);
1924 1885
1925 EXPECT_EQ(Animation::FINISHED, animations->GetAnimationById(1)->run_state()); 1886 EXPECT_EQ(Animation::FINISHED, player_->GetAnimationById(1)->run_state());
1926 EXPECT_EQ(Animation::FINISHED, animations->GetAnimationById(2)->run_state()); 1887 EXPECT_EQ(Animation::FINISHED, player_->GetAnimationById(2)->run_state());
1927 EXPECT_EQ(Animation::RUNNING, animations->GetAnimationById(3)->run_state()); 1888 EXPECT_EQ(Animation::RUNNING, player_->GetAnimationById(3)->run_state());
1928 EXPECT_EQ(Animation::WAITING_FOR_TARGET_AVAILABILITY, 1889 EXPECT_EQ(Animation::WAITING_FOR_TARGET_AVAILABILITY,
1929 animations->GetAnimationById(4)->run_state()); 1890 player_->GetAnimationById(4)->run_state());
1930 EXPECT_EQ(Animation::RUNNING, animations->GetAnimationById(5)->run_state()); 1891 EXPECT_EQ(Animation::RUNNING, player_->GetAnimationById(5)->run_state());
1931 1892
1932 animations->AbortAnimations(TargetProperty::TRANSFORM); 1893 player_->AbortAnimations(TargetProperty::TRANSFORM, false);
1933 1894
1934 // Only un-finished TRANSFORM animations should have been aborted. 1895 // Only un-finished TRANSFORM animations should have been aborted.
1935 EXPECT_EQ(Animation::FINISHED, animations->GetAnimationById(1)->run_state()); 1896 EXPECT_EQ(Animation::FINISHED, player_->GetAnimationById(1)->run_state());
1936 EXPECT_EQ(Animation::FINISHED, animations->GetAnimationById(2)->run_state()); 1897 EXPECT_EQ(Animation::FINISHED, player_->GetAnimationById(2)->run_state());
1937 EXPECT_EQ(Animation::ABORTED, animations->GetAnimationById(3)->run_state()); 1898 EXPECT_EQ(Animation::ABORTED, player_->GetAnimationById(3)->run_state());
1938 EXPECT_EQ(Animation::ABORTED, animations->GetAnimationById(4)->run_state()); 1899 EXPECT_EQ(Animation::ABORTED, player_->GetAnimationById(4)->run_state());
1939 EXPECT_EQ(Animation::RUNNING, animations->GetAnimationById(5)->run_state()); 1900 EXPECT_EQ(Animation::RUNNING, player_->GetAnimationById(5)->run_state());
1940 } 1901 }
1941 1902
1942 // An animation aborted on the main thread should get deleted on both threads. 1903 // An animation aborted on the main thread should get deleted on both threads.
1943 TEST_F(ElementAnimationsTest, MainThreadAbortedAnimationGetsDeleted) { 1904 TEST_F(ElementAnimationsTest, MainThreadAbortedAnimationGetsDeleted) {
1944 CreateTestLayer(true, false); 1905 CreateTestLayer(true, false);
1945 AttachTimelinePlayerLayer(); 1906 AttachTimelinePlayerLayer();
1946 CreateImplTimelineAndPlayer(); 1907 CreateImplTimelineAndPlayer();
1947 1908
1948 scoped_refptr<ElementAnimations> animations = element_animations();
1949 scoped_refptr<ElementAnimations> animations_impl = element_animations_impl();
1950
1951 int animation_id = 1909 int animation_id =
1952 AddOpacityTransitionToPlayer(player_.get(), 1.0, 0.f, 1.f, false); 1910 AddOpacityTransitionToPlayer(player_.get(), 1.0, 0.f, 1.f, false);
1953 EXPECT_TRUE(host_->needs_push_properties()); 1911 EXPECT_TRUE(host_->needs_push_properties());
1954 1912
1955 PushProperties(); 1913 PushProperties();
1956 1914
1957 animations_impl->ActivateAnimations(); 1915 player_impl_->ActivateAnimations();
1958 1916
1959 EXPECT_TRUE(animations_impl->GetAnimationById(animation_id)); 1917 EXPECT_TRUE(player_impl_->GetAnimationById(animation_id));
1960 EXPECT_FALSE(host_->needs_push_properties()); 1918 EXPECT_FALSE(host_->needs_push_properties());
1961 1919
1962 animations->AbortAnimations(TargetProperty::OPACITY); 1920 player_->AbortAnimations(TargetProperty::OPACITY, false);
1963 EXPECT_EQ(Animation::ABORTED, 1921 EXPECT_EQ(Animation::ABORTED,
1964 animations->GetAnimation(TargetProperty::OPACITY)->run_state()); 1922 player_->GetAnimation(TargetProperty::OPACITY)->run_state());
1965 EXPECT_TRUE(host_->needs_push_properties()); 1923 EXPECT_TRUE(host_->needs_push_properties());
1966 1924
1967 animations->Animate(kInitialTickTime); 1925 element_animations_->Animate(kInitialTickTime);
1968 animations->UpdateState(true, nullptr); 1926 element_animations_->UpdateState(true, nullptr);
1969 EXPECT_EQ(Animation::ABORTED, 1927 EXPECT_EQ(Animation::ABORTED,
1970 animations->GetAnimation(TargetProperty::OPACITY)->run_state()); 1928 player_->GetAnimation(TargetProperty::OPACITY)->run_state());
1971 1929
1972 EXPECT_TRUE(animations->needs_push_properties()); 1930 EXPECT_TRUE(player_->needs_push_properties());
1973 EXPECT_TRUE(player_->needs_push_properties()); 1931 EXPECT_TRUE(player_->needs_push_properties());
1974 EXPECT_TRUE(host_->needs_push_properties()); 1932 EXPECT_TRUE(host_->needs_push_properties());
1975 1933
1976 PushProperties(); 1934 PushProperties();
1977 EXPECT_FALSE(host_->needs_push_properties()); 1935 EXPECT_FALSE(host_->needs_push_properties());
1978 EXPECT_FALSE(player_->needs_push_properties()); 1936 EXPECT_FALSE(player_->needs_push_properties());
1979 1937
1980 EXPECT_FALSE(animations->GetAnimationById(animation_id)); 1938 EXPECT_FALSE(player_->GetAnimationById(animation_id));
1981 EXPECT_FALSE(animations_impl->GetAnimationById(animation_id)); 1939 EXPECT_FALSE(player_impl_->GetAnimationById(animation_id));
1982 } 1940 }
1983 1941
1984 // An animation aborted on the impl thread should get deleted on both threads. 1942 // An animation aborted on the impl thread should get deleted on both threads.
1985 TEST_F(ElementAnimationsTest, ImplThreadAbortedAnimationGetsDeleted) { 1943 TEST_F(ElementAnimationsTest, ImplThreadAbortedAnimationGetsDeleted) {
1986 CreateTestLayer(true, false); 1944 CreateTestLayer(true, false);
1987 AttachTimelinePlayerLayer(); 1945 AttachTimelinePlayerLayer();
1988 CreateImplTimelineAndPlayer(); 1946 CreateImplTimelineAndPlayer();
1989 1947
1990 scoped_refptr<ElementAnimations> animations = element_animations();
1991 scoped_refptr<ElementAnimations> animations_impl = element_animations_impl();
1992
1993 TestAnimationDelegate delegate; 1948 TestAnimationDelegate delegate;
1994 player_->set_animation_delegate(&delegate); 1949 player_->set_animation_delegate(&delegate);
1995 1950
1996 int animation_id = AddOpacityTransitionToElementAnimations( 1951 int animation_id =
1997 animations.get(), 1.0, 0.f, 1.f, false); 1952 AddOpacityTransitionToPlayer(player_.get(), 1.0, 0.f, 1.f, false);
1998 1953
1999 PushProperties(); 1954 PushProperties();
2000 EXPECT_FALSE(host_->needs_push_properties()); 1955 EXPECT_FALSE(host_->needs_push_properties());
2001 1956
2002 animations_impl->ActivateAnimations(); 1957 player_impl_->ActivateAnimations();
2003 EXPECT_TRUE(animations_impl->GetAnimationById(animation_id)); 1958 EXPECT_TRUE(player_impl_->GetAnimationById(animation_id));
2004 1959
2005 animations_impl->AbortAnimations(TargetProperty::OPACITY); 1960 player_impl_->AbortAnimations(TargetProperty::OPACITY, false);
2006 EXPECT_EQ( 1961 EXPECT_EQ(Animation::ABORTED,
2007 Animation::ABORTED, 1962 player_impl_->GetAnimation(TargetProperty::OPACITY)->run_state());
2008 animations_impl->GetAnimation(TargetProperty::OPACITY)->run_state());
2009 EXPECT_TRUE(host_impl_->needs_push_properties()); 1963 EXPECT_TRUE(host_impl_->needs_push_properties());
2010 EXPECT_TRUE(player_impl_->needs_push_properties()); 1964 EXPECT_TRUE(player_impl_->needs_push_properties());
2011 1965
2012 auto events = host_impl_->CreateEvents(); 1966 auto events = host_impl_->CreateEvents();
2013 animations_impl->Animate(kInitialTickTime); 1967 element_animations_impl_->Animate(kInitialTickTime);
2014 animations_impl->UpdateState(true, events.get()); 1968 element_animations_impl_->UpdateState(true, events.get());
2015 EXPECT_TRUE(host_impl_->needs_push_properties()); 1969 EXPECT_TRUE(host_impl_->needs_push_properties());
2016 EXPECT_EQ(1u, events->events_.size()); 1970 EXPECT_EQ(1u, events->events_.size());
2017 EXPECT_EQ(AnimationEvent::ABORTED, events->events_[0].type); 1971 EXPECT_EQ(AnimationEvent::ABORTED, events->events_[0].type);
2018 EXPECT_EQ( 1972 EXPECT_EQ(Animation::WAITING_FOR_DELETION,
2019 Animation::WAITING_FOR_DELETION, 1973 player_impl_->GetAnimation(TargetProperty::OPACITY)->run_state());
2020 animations_impl->GetAnimation(TargetProperty::OPACITY)->run_state());
2021 1974
2022 animations->NotifyAnimationAborted(events->events_[0]); 1975 player_->NotifyAnimationAborted(events->events_[0]);
2023 EXPECT_EQ(Animation::ABORTED, 1976 EXPECT_EQ(Animation::ABORTED,
2024 animations->GetAnimation(TargetProperty::OPACITY)->run_state()); 1977 player_->GetAnimation(TargetProperty::OPACITY)->run_state());
2025 EXPECT_TRUE(delegate.aborted()); 1978 EXPECT_TRUE(delegate.aborted());
2026 1979
2027 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(500)); 1980 element_animations_->Animate(kInitialTickTime +
2028 animations->UpdateState(true, nullptr); 1981 TimeDelta::FromMilliseconds(500));
1982 element_animations_->UpdateState(true, nullptr);
2029 EXPECT_TRUE(host_->needs_push_properties()); 1983 EXPECT_TRUE(host_->needs_push_properties());
2030 EXPECT_EQ(Animation::WAITING_FOR_DELETION, 1984 EXPECT_EQ(Animation::WAITING_FOR_DELETION,
2031 animations->GetAnimation(TargetProperty::OPACITY)->run_state()); 1985 player_->GetAnimation(TargetProperty::OPACITY)->run_state());
2032 1986
2033 PushProperties(); 1987 PushProperties();
2034 1988
2035 animations_impl->ActivateAnimations(); 1989 player_impl_->ActivateAnimations();
2036 EXPECT_FALSE(animations->GetAnimationById(animation_id)); 1990 EXPECT_FALSE(player_->GetAnimationById(animation_id));
2037 EXPECT_FALSE(animations_impl->GetAnimationById(animation_id)); 1991 EXPECT_FALSE(player_impl_->GetAnimationById(animation_id));
2038 } 1992 }
2039 1993
2040 // Test that an impl-only scroll offset animation that needs to be completed on 1994 // Test that an impl-only scroll offset animation that needs to be completed on
2041 // the main thread gets deleted. 1995 // the main thread gets deleted.
2042 TEST_F(ElementAnimationsTest, ImplThreadTakeoverAnimationGetsDeleted) { 1996 TEST_F(ElementAnimationsTest, ImplThreadTakeoverAnimationGetsDeleted) {
2043 CreateTestLayer(true, false); 1997 CreateTestLayer(true, false);
2044 AttachTimelinePlayerLayer(); 1998 AttachTimelinePlayerLayer();
2045 CreateImplTimelineAndPlayer(); 1999 CreateImplTimelineAndPlayer();
2046 2000
2047 scoped_refptr<ElementAnimations> animations = element_animations();
2048 scoped_refptr<ElementAnimations> animations_impl = element_animations_impl();
2049
2050 TestAnimationDelegate delegate_impl; 2001 TestAnimationDelegate delegate_impl;
2051 player_impl_->set_animation_delegate(&delegate_impl); 2002 player_impl_->set_animation_delegate(&delegate_impl);
2052 TestAnimationDelegate delegate; 2003 TestAnimationDelegate delegate;
2053 player_->set_animation_delegate(&delegate); 2004 player_->set_animation_delegate(&delegate);
2054 2005
2055 // Add impl-only scroll offset animation. 2006 // Add impl-only scroll offset animation.
2056 const int animation_id = 1; 2007 const int animation_id = 1;
2057 gfx::ScrollOffset initial_value(100.f, 300.f); 2008 gfx::ScrollOffset initial_value(100.f, 300.f);
2058 gfx::ScrollOffset target_value(300.f, 200.f); 2009 gfx::ScrollOffset target_value(300.f, 200.f);
2059 std::unique_ptr<ScrollOffsetAnimationCurve> curve( 2010 std::unique_ptr<ScrollOffsetAnimationCurve> curve(
2060 ScrollOffsetAnimationCurve::Create( 2011 ScrollOffsetAnimationCurve::Create(
2061 target_value, CubicBezierTimingFunction::CreatePreset( 2012 target_value, CubicBezierTimingFunction::CreatePreset(
2062 CubicBezierTimingFunction::EaseType::EASE_IN_OUT))); 2013 CubicBezierTimingFunction::EaseType::EASE_IN_OUT)));
2063 curve->SetInitialValue(initial_value); 2014 curve->SetInitialValue(initial_value);
2064 std::unique_ptr<Animation> animation(Animation::Create( 2015 std::unique_ptr<Animation> animation(Animation::Create(
2065 std::move(curve), animation_id, 0, TargetProperty::SCROLL_OFFSET)); 2016 std::move(curve), animation_id, 0, TargetProperty::SCROLL_OFFSET));
2066 animation->set_start_time(TicksFromSecondsF(123)); 2017 animation->set_start_time(TicksFromSecondsF(123));
2067 animation->set_is_impl_only(true); 2018 animation->set_is_impl_only(true);
2068 animations_impl->AddAnimation(std::move(animation)); 2019 player_impl_->AddAnimation(std::move(animation));
2069 2020
2070 PushProperties(); 2021 PushProperties();
2071 EXPECT_FALSE(host_->needs_push_properties()); 2022 EXPECT_FALSE(host_->needs_push_properties());
2072 2023
2073 animations_impl->ActivateAnimations(); 2024 player_impl_->ActivateAnimations();
2074 EXPECT_TRUE(animations_impl->GetAnimationById(animation_id)); 2025 EXPECT_TRUE(player_impl_->GetAnimationById(animation_id));
2075 2026
2076 const bool needs_completion = true; 2027 player_impl_->AbortAnimations(TargetProperty::SCROLL_OFFSET, true);
2077 animations_impl->AbortAnimations(TargetProperty::SCROLL_OFFSET,
2078 needs_completion);
2079 EXPECT_TRUE(host_impl_->needs_push_properties()); 2028 EXPECT_TRUE(host_impl_->needs_push_properties());
2080 EXPECT_EQ(Animation::ABORTED_BUT_NEEDS_COMPLETION, 2029 EXPECT_EQ(
2081 animations_impl->GetAnimation(TargetProperty::SCROLL_OFFSET) 2030 Animation::ABORTED_BUT_NEEDS_COMPLETION,
2082 ->run_state()); 2031 player_impl_->GetAnimation(TargetProperty::SCROLL_OFFSET)->run_state());
2083 2032
2084 auto events = host_impl_->CreateEvents(); 2033 auto events = host_impl_->CreateEvents();
2085 animations_impl->Animate(kInitialTickTime); 2034 element_animations_impl_->Animate(kInitialTickTime);
2086 animations_impl->UpdateState(true, events.get()); 2035 element_animations_impl_->UpdateState(true, events.get());
2087 EXPECT_TRUE(delegate_impl.finished()); 2036 EXPECT_TRUE(delegate_impl.finished());
2088 EXPECT_TRUE(host_impl_->needs_push_properties()); 2037 EXPECT_TRUE(host_impl_->needs_push_properties());
2089 EXPECT_EQ(1u, events->events_.size()); 2038 EXPECT_EQ(1u, events->events_.size());
2090 EXPECT_EQ(AnimationEvent::TAKEOVER, events->events_[0].type); 2039 EXPECT_EQ(AnimationEvent::TAKEOVER, events->events_[0].type);
2091 EXPECT_EQ(123, events->events_[0].animation_start_time); 2040 EXPECT_EQ(123, events->events_[0].animation_start_time);
2092 EXPECT_EQ( 2041 EXPECT_EQ(
2093 target_value, 2042 target_value,
2094 events->events_[0].curve->ToScrollOffsetAnimationCurve()->target_value()); 2043 events->events_[0].curve->ToScrollOffsetAnimationCurve()->target_value());
2095 EXPECT_EQ(Animation::WAITING_FOR_DELETION, 2044 EXPECT_EQ(
2096 animations_impl->GetAnimation(TargetProperty::SCROLL_OFFSET) 2045 Animation::WAITING_FOR_DELETION,
2097 ->run_state()); 2046 player_impl_->GetAnimation(TargetProperty::SCROLL_OFFSET)->run_state());
2098 2047
2099 // MT receives the event to take over. 2048 // MT receives the event to take over.
2100 animations->NotifyAnimationTakeover(events->events_[0]); 2049 player_->NotifyAnimationTakeover(events->events_[0]);
2101 EXPECT_TRUE(delegate.takeover()); 2050 EXPECT_TRUE(delegate.takeover());
2102 2051
2103 // AnimationPlayer::NotifyAnimationTakeover requests SetNeedsPushProperties 2052 // AnimationPlayer::NotifyAnimationTakeover requests SetNeedsPushProperties
2104 // to purge CT animations marked for deletion. 2053 // to purge CT animations marked for deletion.
2105 EXPECT_TRUE(animations->needs_push_properties()); 2054 EXPECT_TRUE(player_->needs_push_properties());
2106 2055
2107 // ElementAnimations::PurgeAnimationsMarkedForDeletion call happens only in 2056 // ElementAnimations::PurgeAnimationsMarkedForDeletion call happens only in
2108 // ElementAnimations::PushPropertiesTo. 2057 // ElementAnimations::PushPropertiesTo.
2109 PushProperties(); 2058 PushProperties();
2110 2059
2111 animations_impl->ActivateAnimations(); 2060 player_impl_->ActivateAnimations();
2112 EXPECT_FALSE(animations->GetAnimationById(animation_id)); 2061 EXPECT_FALSE(player_->GetAnimationById(animation_id));
2113 EXPECT_FALSE(animations_impl->GetAnimationById(animation_id)); 2062 EXPECT_FALSE(player_impl_->GetAnimationById(animation_id));
2114 } 2063 }
2115 2064
2116 // Ensure that we only generate FINISHED events for animations in a group 2065 // Ensure that we only generate FINISHED events for animations in a group
2117 // once all animations in that group are finished. 2066 // once all animations in that group are finished.
2118 TEST_F(ElementAnimationsTest, FinishedEventsForGroup) { 2067 TEST_F(ElementAnimationsTest, FinishedEventsForGroup) {
2119 CreateTestLayer(true, false); 2068 CreateTestLayer(true, false);
2120 AttachTimelinePlayerLayer(); 2069 AttachTimelinePlayerLayer();
2121 CreateImplTimelineAndPlayer(); 2070 CreateImplTimelineAndPlayer();
2122 2071
2123 scoped_refptr<ElementAnimations> animations_impl = element_animations_impl();
2124
2125 auto events = host_impl_->CreateEvents(); 2072 auto events = host_impl_->CreateEvents();
2126 2073
2127 const int group_id = 1; 2074 const int group_id = 1;
2128 2075
2129 // Add two animations with the same group id but different durations. 2076 // Add two animations with the same group id but different durations.
2130 std::unique_ptr<Animation> first_animation(Animation::Create( 2077 std::unique_ptr<Animation> first_animation(Animation::Create(
2131 std::unique_ptr<AnimationCurve>(new FakeTransformTransition(2.0)), 1, 2078 std::unique_ptr<AnimationCurve>(new FakeTransformTransition(2.0)), 1,
2132 group_id, TargetProperty::TRANSFORM)); 2079 group_id, TargetProperty::TRANSFORM));
2133 first_animation->set_is_controlling_instance_for_test(true); 2080 first_animation->set_is_controlling_instance_for_test(true);
2134 animations_impl->AddAnimation(std::move(first_animation)); 2081 player_impl_->AddAnimation(std::move(first_animation));
2135 2082
2136 std::unique_ptr<Animation> second_animation(Animation::Create( 2083 std::unique_ptr<Animation> second_animation(Animation::Create(
2137 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)), 2084 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)),
2138 2, group_id, TargetProperty::OPACITY)); 2085 2, group_id, TargetProperty::OPACITY));
2139 second_animation->set_is_controlling_instance_for_test(true); 2086 second_animation->set_is_controlling_instance_for_test(true);
2140 animations_impl->AddAnimation(std::move(second_animation)); 2087 player_impl_->AddAnimation(std::move(second_animation));
2141 2088
2142 animations_impl->Animate(kInitialTickTime); 2089 element_animations_impl_->Animate(kInitialTickTime);
2143 animations_impl->UpdateState(true, events.get()); 2090 element_animations_impl_->UpdateState(true, events.get());
2144 2091
2145 // Both animations should have started. 2092 // Both animations should have started.
2146 EXPECT_EQ(2u, events->events_.size()); 2093 EXPECT_EQ(2u, events->events_.size());
2147 EXPECT_EQ(AnimationEvent::STARTED, events->events_[0].type); 2094 EXPECT_EQ(AnimationEvent::STARTED, events->events_[0].type);
2148 EXPECT_EQ(AnimationEvent::STARTED, events->events_[1].type); 2095 EXPECT_EQ(AnimationEvent::STARTED, events->events_[1].type);
2149 2096
2150 events = host_impl_->CreateEvents(); 2097 events = host_impl_->CreateEvents();
2151 animations_impl->Animate(kInitialTickTime + 2098 element_animations_impl_->Animate(kInitialTickTime +
2152 TimeDelta::FromMilliseconds(1000)); 2099 TimeDelta::FromMilliseconds(1000));
2153 animations_impl->UpdateState(true, events.get()); 2100 element_animations_impl_->UpdateState(true, events.get());
2154 2101
2155 // The opacity animation should be finished, but should not have generated 2102 // The opacity animation should be finished, but should not have generated
2156 // a FINISHED event yet. 2103 // a FINISHED event yet.
2157 EXPECT_EQ(0u, events->events_.size()); 2104 EXPECT_EQ(0u, events->events_.size());
2158 EXPECT_EQ(Animation::FINISHED, 2105 EXPECT_EQ(Animation::FINISHED,
2159 animations_impl->GetAnimationById(2)->run_state()); 2106 player_impl_->GetAnimationById(2)->run_state());
2160 EXPECT_EQ(Animation::RUNNING, 2107 EXPECT_EQ(Animation::RUNNING, player_impl_->GetAnimationById(1)->run_state());
2161 animations_impl->GetAnimationById(1)->run_state());
2162 2108
2163 animations_impl->Animate(kInitialTickTime + 2109 element_animations_impl_->Animate(kInitialTickTime +
2164 TimeDelta::FromMilliseconds(2000)); 2110 TimeDelta::FromMilliseconds(2000));
2165 animations_impl->UpdateState(true, events.get()); 2111 element_animations_impl_->UpdateState(true, events.get());
2166 2112
2167 // Both animations should have generated FINISHED events. 2113 // Both animations should have generated FINISHED events.
2168 EXPECT_EQ(2u, events->events_.size()); 2114 EXPECT_EQ(2u, events->events_.size());
2169 EXPECT_EQ(AnimationEvent::FINISHED, events->events_[0].type); 2115 EXPECT_EQ(AnimationEvent::FINISHED, events->events_[0].type);
2170 EXPECT_EQ(AnimationEvent::FINISHED, events->events_[1].type); 2116 EXPECT_EQ(AnimationEvent::FINISHED, events->events_[1].type);
2171 } 2117 }
2172 2118
2173 // Ensure that when a group has a mix of aborted and finished animations, 2119 // Ensure that when a group has a mix of aborted and finished animations,
2174 // we generate a FINISHED event for the finished animation and an ABORTED 2120 // we generate a FINISHED event for the finished animation and an ABORTED
2175 // event for the aborted animation. 2121 // event for the aborted animation.
2176 TEST_F(ElementAnimationsTest, FinishedAndAbortedEventsForGroup) { 2122 TEST_F(ElementAnimationsTest, FinishedAndAbortedEventsForGroup) {
2177 CreateTestLayer(true, false); 2123 CreateTestLayer(true, false);
2178 AttachTimelinePlayerLayer(); 2124 AttachTimelinePlayerLayer();
2179 CreateImplTimelineAndPlayer(); 2125 CreateImplTimelineAndPlayer();
2180 2126
2181 scoped_refptr<ElementAnimations> animations_impl = element_animations_impl();
2182
2183 auto events = host_impl_->CreateEvents(); 2127 auto events = host_impl_->CreateEvents();
2184 2128
2185 // Add two animations with the same group id. 2129 // Add two animations with the same group id.
2186 std::unique_ptr<Animation> first_animation(CreateAnimation( 2130 std::unique_ptr<Animation> first_animation(CreateAnimation(
2187 std::unique_ptr<AnimationCurve>(new FakeTransformTransition(1.0)), 1, 2131 std::unique_ptr<AnimationCurve>(new FakeTransformTransition(1.0)), 1,
2188 TargetProperty::TRANSFORM)); 2132 TargetProperty::TRANSFORM));
2189 first_animation->set_is_controlling_instance_for_test(true); 2133 first_animation->set_is_controlling_instance_for_test(true);
2190 animations_impl->AddAnimation(std::move(first_animation)); 2134 player_impl_->AddAnimation(std::move(first_animation));
2191 2135
2192 std::unique_ptr<Animation> second_animation(CreateAnimation( 2136 std::unique_ptr<Animation> second_animation(CreateAnimation(
2193 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)), 2137 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)),
2194 1, TargetProperty::OPACITY)); 2138 1, TargetProperty::OPACITY));
2195 second_animation->set_is_controlling_instance_for_test(true); 2139 second_animation->set_is_controlling_instance_for_test(true);
2196 animations_impl->AddAnimation(std::move(second_animation)); 2140 player_impl_->AddAnimation(std::move(second_animation));
2197 2141
2198 animations_impl->Animate(kInitialTickTime); 2142 element_animations_impl_->Animate(kInitialTickTime);
2199 animations_impl->UpdateState(true, events.get()); 2143 element_animations_impl_->UpdateState(true, events.get());
2200 2144
2201 // Both animations should have started. 2145 // Both animations should have started.
2202 EXPECT_EQ(2u, events->events_.size()); 2146 EXPECT_EQ(2u, events->events_.size());
2203 EXPECT_EQ(AnimationEvent::STARTED, events->events_[0].type); 2147 EXPECT_EQ(AnimationEvent::STARTED, events->events_[0].type);
2204 EXPECT_EQ(AnimationEvent::STARTED, events->events_[1].type); 2148 EXPECT_EQ(AnimationEvent::STARTED, events->events_[1].type);
2205 2149
2206 animations_impl->AbortAnimations(TargetProperty::OPACITY); 2150 player_impl_->AbortAnimations(TargetProperty::OPACITY, false);
2207 2151
2208 events = host_impl_->CreateEvents(); 2152 events = host_impl_->CreateEvents();
2209 animations_impl->Animate(kInitialTickTime + 2153 element_animations_impl_->Animate(kInitialTickTime +
2210 TimeDelta::FromMilliseconds(1000)); 2154 TimeDelta::FromMilliseconds(1000));
2211 animations_impl->UpdateState(true, events.get()); 2155 element_animations_impl_->UpdateState(true, events.get());
2212 2156
2213 // We should have exactly 2 events: a FINISHED event for the tranform 2157 // We should have exactly 2 events: a FINISHED event for the tranform
2214 // animation, and an ABORTED event for the opacity animation. 2158 // animation, and an ABORTED event for the opacity animation.
2215 EXPECT_EQ(2u, events->events_.size()); 2159 EXPECT_EQ(2u, events->events_.size());
2216 EXPECT_EQ(AnimationEvent::FINISHED, events->events_[0].type); 2160 EXPECT_EQ(AnimationEvent::FINISHED, events->events_[0].type);
2217 EXPECT_EQ(TargetProperty::TRANSFORM, events->events_[0].target_property); 2161 EXPECT_EQ(TargetProperty::TRANSFORM, events->events_[0].target_property);
2218 EXPECT_EQ(AnimationEvent::ABORTED, events->events_[1].type); 2162 EXPECT_EQ(AnimationEvent::ABORTED, events->events_[1].type);
2219 EXPECT_EQ(TargetProperty::OPACITY, events->events_[1].target_property); 2163 EXPECT_EQ(TargetProperty::OPACITY, events->events_[1].target_property);
2220 } 2164 }
2221 2165
2222 TEST_F(ElementAnimationsTest, HasOnlyTranslationTransforms) { 2166 TEST_F(ElementAnimationsTest, HasOnlyTranslationTransforms) {
2223 CreateTestLayer(true, false); 2167 CreateTestLayer(true, false);
2224 AttachTimelinePlayerLayer(); 2168 AttachTimelinePlayerLayer();
2225 CreateImplTimelineAndPlayer(); 2169 CreateImplTimelineAndPlayer();
2226 2170
2227 scoped_refptr<ElementAnimations> animations_impl = element_animations_impl(); 2171 EXPECT_TRUE(
2172 player_impl_->HasOnlyTranslationTransforms(ElementListType::ACTIVE));
2173 EXPECT_TRUE(
2174 player_impl_->HasOnlyTranslationTransforms(ElementListType::PENDING));
2228 2175
2229 EXPECT_TRUE( 2176 player_impl_->AddAnimation(CreateAnimation(
2230 animations_impl->HasOnlyTranslationTransforms(ElementListType::ACTIVE));
2231 EXPECT_TRUE(
2232 animations_impl->HasOnlyTranslationTransforms(ElementListType::PENDING));
2233
2234 animations_impl->AddAnimation(CreateAnimation(
2235 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)), 2177 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)),
2236 1, TargetProperty::OPACITY)); 2178 1, TargetProperty::OPACITY));
2237 2179
2238 // Opacity animations aren't non-translation transforms. 2180 // Opacity animations aren't non-translation transforms.
2239 EXPECT_TRUE( 2181 EXPECT_TRUE(
2240 animations_impl->HasOnlyTranslationTransforms(ElementListType::ACTIVE)); 2182 player_impl_->HasOnlyTranslationTransforms(ElementListType::ACTIVE));
2241 EXPECT_TRUE( 2183 EXPECT_TRUE(
2242 animations_impl->HasOnlyTranslationTransforms(ElementListType::PENDING)); 2184 player_impl_->HasOnlyTranslationTransforms(ElementListType::PENDING));
2243 2185
2244 std::unique_ptr<KeyframedTransformAnimationCurve> curve1( 2186 std::unique_ptr<KeyframedTransformAnimationCurve> curve1(
2245 KeyframedTransformAnimationCurve::Create()); 2187 KeyframedTransformAnimationCurve::Create());
2246 2188
2247 TransformOperations operations1; 2189 TransformOperations operations1;
2248 curve1->AddKeyframe( 2190 curve1->AddKeyframe(
2249 TransformKeyframe::Create(base::TimeDelta(), operations1, nullptr)); 2191 TransformKeyframe::Create(base::TimeDelta(), operations1, nullptr));
2250 operations1.AppendTranslate(10.0, 15.0, 0.0); 2192 operations1.AppendTranslate(10.0, 15.0, 0.0);
2251 curve1->AddKeyframe(TransformKeyframe::Create( 2193 curve1->AddKeyframe(TransformKeyframe::Create(
2252 base::TimeDelta::FromSecondsD(1.0), operations1, nullptr)); 2194 base::TimeDelta::FromSecondsD(1.0), operations1, nullptr));
2253 2195
2254 std::unique_ptr<Animation> animation( 2196 std::unique_ptr<Animation> animation(
2255 Animation::Create(std::move(curve1), 2, 2, TargetProperty::TRANSFORM)); 2197 Animation::Create(std::move(curve1), 2, 2, TargetProperty::TRANSFORM));
2256 animations_impl->AddAnimation(std::move(animation)); 2198 player_impl_->AddAnimation(std::move(animation));
2257 2199
2258 // The only transform animation we've added is a translation. 2200 // The only transform animation we've added is a translation.
2259 EXPECT_TRUE( 2201 EXPECT_TRUE(
2260 animations_impl->HasOnlyTranslationTransforms(ElementListType::ACTIVE)); 2202 player_impl_->HasOnlyTranslationTransforms(ElementListType::ACTIVE));
2261 EXPECT_TRUE( 2203 EXPECT_TRUE(
2262 animations_impl->HasOnlyTranslationTransforms(ElementListType::PENDING)); 2204 player_impl_->HasOnlyTranslationTransforms(ElementListType::PENDING));
2263 2205
2264 std::unique_ptr<KeyframedTransformAnimationCurve> curve2( 2206 std::unique_ptr<KeyframedTransformAnimationCurve> curve2(
2265 KeyframedTransformAnimationCurve::Create()); 2207 KeyframedTransformAnimationCurve::Create());
2266 2208
2267 TransformOperations operations2; 2209 TransformOperations operations2;
2268 curve2->AddKeyframe( 2210 curve2->AddKeyframe(
2269 TransformKeyframe::Create(base::TimeDelta(), operations2, nullptr)); 2211 TransformKeyframe::Create(base::TimeDelta(), operations2, nullptr));
2270 operations2.AppendScale(2.0, 3.0, 4.0); 2212 operations2.AppendScale(2.0, 3.0, 4.0);
2271 curve2->AddKeyframe(TransformKeyframe::Create( 2213 curve2->AddKeyframe(TransformKeyframe::Create(
2272 base::TimeDelta::FromSecondsD(1.0), operations2, nullptr)); 2214 base::TimeDelta::FromSecondsD(1.0), operations2, nullptr));
2273 2215
2274 animation = 2216 animation =
2275 Animation::Create(std::move(curve2), 3, 3, TargetProperty::TRANSFORM); 2217 Animation::Create(std::move(curve2), 3, 3, TargetProperty::TRANSFORM);
2276 animation->set_affects_active_elements(false); 2218 animation->set_affects_active_elements(false);
2277 animations_impl->AddAnimation(std::move(animation)); 2219 player_impl_->AddAnimation(std::move(animation));
2278 2220
2279 // A scale animation is not a translation. 2221 // A scale animation is not a translation.
2280 EXPECT_FALSE( 2222 EXPECT_FALSE(
2281 animations_impl->HasOnlyTranslationTransforms(ElementListType::PENDING)); 2223 player_impl_->HasOnlyTranslationTransforms(ElementListType::PENDING));
2282 EXPECT_TRUE( 2224 EXPECT_TRUE(
2283 animations_impl->HasOnlyTranslationTransforms(ElementListType::ACTIVE)); 2225 player_impl_->HasOnlyTranslationTransforms(ElementListType::ACTIVE));
2284 2226
2285 animations_impl->ActivateAnimations(); 2227 player_impl_->ActivateAnimations();
2286 EXPECT_FALSE( 2228 EXPECT_FALSE(
2287 animations_impl->HasOnlyTranslationTransforms(ElementListType::PENDING)); 2229 player_impl_->HasOnlyTranslationTransforms(ElementListType::PENDING));
2288 EXPECT_FALSE( 2230 EXPECT_FALSE(
2289 animations_impl->HasOnlyTranslationTransforms(ElementListType::ACTIVE)); 2231 player_impl_->HasOnlyTranslationTransforms(ElementListType::ACTIVE));
2290 2232
2291 animations_impl->GetAnimationById(3)->set_affects_pending_elements(false); 2233 player_impl_->GetAnimationById(3)->set_affects_pending_elements(false);
2292 EXPECT_TRUE( 2234 EXPECT_TRUE(
2293 animations_impl->HasOnlyTranslationTransforms(ElementListType::PENDING)); 2235 player_impl_->HasOnlyTranslationTransforms(ElementListType::PENDING));
2294 EXPECT_FALSE( 2236 EXPECT_FALSE(
2295 animations_impl->HasOnlyTranslationTransforms(ElementListType::ACTIVE)); 2237 player_impl_->HasOnlyTranslationTransforms(ElementListType::ACTIVE));
2296 2238
2297 animations_impl->GetAnimationById(3)->SetRunState(Animation::FINISHED, 2239 player_impl_->GetAnimationById(3)->SetRunState(Animation::FINISHED,
2298 TicksFromSecondsF(0.0)); 2240 TicksFromSecondsF(0.0));
2299 2241
2300 // Only unfinished animations should be considered by 2242 // Only unfinished animations should be considered by
2301 // HasOnlyTranslationTransforms. 2243 // HasOnlyTranslationTransforms.
2302 EXPECT_TRUE( 2244 EXPECT_TRUE(
2303 animations_impl->HasOnlyTranslationTransforms(ElementListType::PENDING)); 2245 player_impl_->HasOnlyTranslationTransforms(ElementListType::PENDING));
2304 EXPECT_TRUE( 2246 EXPECT_TRUE(
2305 animations_impl->HasOnlyTranslationTransforms(ElementListType::ACTIVE)); 2247 player_impl_->HasOnlyTranslationTransforms(ElementListType::ACTIVE));
2306 } 2248 }
2307 2249
2308 TEST_F(ElementAnimationsTest, AnimationStartScale) { 2250 TEST_F(ElementAnimationsTest, AnimationStartScale) {
2309 CreateTestLayer(true, false); 2251 CreateTestLayer(true, false);
2310 AttachTimelinePlayerLayer(); 2252 AttachTimelinePlayerLayer();
2311 CreateImplTimelineAndPlayer(); 2253 CreateImplTimelineAndPlayer();
2312 2254
2313 scoped_refptr<ElementAnimations> animations_impl = element_animations_impl();
2314
2315 std::unique_ptr<KeyframedTransformAnimationCurve> curve1( 2255 std::unique_ptr<KeyframedTransformAnimationCurve> curve1(
2316 KeyframedTransformAnimationCurve::Create()); 2256 KeyframedTransformAnimationCurve::Create());
2317 2257
2318 TransformOperations operations1; 2258 TransformOperations operations1;
2319 operations1.AppendScale(2.0, 3.0, 4.0); 2259 operations1.AppendScale(2.0, 3.0, 4.0);
2320 curve1->AddKeyframe( 2260 curve1->AddKeyframe(
2321 TransformKeyframe::Create(base::TimeDelta(), operations1, nullptr)); 2261 TransformKeyframe::Create(base::TimeDelta(), operations1, nullptr));
2322 TransformOperations operations2; 2262 TransformOperations operations2;
2323 curve1->AddKeyframe(TransformKeyframe::Create( 2263 curve1->AddKeyframe(TransformKeyframe::Create(
2324 base::TimeDelta::FromSecondsD(1.0), operations2, nullptr)); 2264 base::TimeDelta::FromSecondsD(1.0), operations2, nullptr));
2325 std::unique_ptr<Animation> animation( 2265 std::unique_ptr<Animation> animation(
2326 Animation::Create(std::move(curve1), 1, 1, TargetProperty::TRANSFORM)); 2266 Animation::Create(std::move(curve1), 1, 1, TargetProperty::TRANSFORM));
2327 animation->set_affects_active_elements(false); 2267 animation->set_affects_active_elements(false);
2328 animations_impl->AddAnimation(std::move(animation)); 2268 player_impl_->AddAnimation(std::move(animation));
2329 2269
2330 float start_scale = 0.f; 2270 float start_scale = 0.f;
2331 EXPECT_TRUE(animations_impl->AnimationStartScale(ElementListType::PENDING, 2271 EXPECT_TRUE(player_impl_->AnimationStartScale(ElementListType::PENDING,
2332 &start_scale)); 2272 &start_scale));
2333 EXPECT_EQ(4.f, start_scale); 2273 EXPECT_EQ(4.f, start_scale);
2334 EXPECT_TRUE(animations_impl->AnimationStartScale(ElementListType::ACTIVE, 2274 EXPECT_TRUE(
2335 &start_scale)); 2275 player_impl_->AnimationStartScale(ElementListType::ACTIVE, &start_scale));
2336 EXPECT_EQ(0.f, start_scale); 2276 EXPECT_EQ(0.f, start_scale);
2337 2277
2338 animations_impl->ActivateAnimations(); 2278 player_impl_->ActivateAnimations();
2339 EXPECT_TRUE(animations_impl->AnimationStartScale(ElementListType::PENDING, 2279 EXPECT_TRUE(player_impl_->AnimationStartScale(ElementListType::PENDING,
2340 &start_scale)); 2280 &start_scale));
2341 EXPECT_EQ(4.f, start_scale); 2281 EXPECT_EQ(4.f, start_scale);
2342 EXPECT_TRUE(animations_impl->AnimationStartScale(ElementListType::ACTIVE, 2282 EXPECT_TRUE(
2343 &start_scale)); 2283 player_impl_->AnimationStartScale(ElementListType::ACTIVE, &start_scale));
2344 EXPECT_EQ(4.f, start_scale); 2284 EXPECT_EQ(4.f, start_scale);
2345 2285
2346 std::unique_ptr<KeyframedTransformAnimationCurve> curve2( 2286 std::unique_ptr<KeyframedTransformAnimationCurve> curve2(
2347 KeyframedTransformAnimationCurve::Create()); 2287 KeyframedTransformAnimationCurve::Create());
2348 2288
2349 TransformOperations operations3; 2289 TransformOperations operations3;
2350 curve2->AddKeyframe( 2290 curve2->AddKeyframe(
2351 TransformKeyframe::Create(base::TimeDelta(), operations3, nullptr)); 2291 TransformKeyframe::Create(base::TimeDelta(), operations3, nullptr));
2352 operations3.AppendScale(6.0, 5.0, 4.0); 2292 operations3.AppendScale(6.0, 5.0, 4.0);
2353 curve2->AddKeyframe(TransformKeyframe::Create( 2293 curve2->AddKeyframe(TransformKeyframe::Create(
2354 base::TimeDelta::FromSecondsD(1.0), operations3, nullptr)); 2294 base::TimeDelta::FromSecondsD(1.0), operations3, nullptr));
2355 2295
2356 animations_impl->RemoveAnimation(1); 2296 player_impl_->RemoveAnimation(1);
2357 animation = 2297 animation =
2358 Animation::Create(std::move(curve2), 2, 2, TargetProperty::TRANSFORM); 2298 Animation::Create(std::move(curve2), 2, 2, TargetProperty::TRANSFORM);
2359 2299
2360 // Reverse Direction 2300 // Reverse Direction
2361 animation->set_direction(Animation::Direction::REVERSE); 2301 animation->set_direction(Animation::Direction::REVERSE);
2362 animation->set_affects_active_elements(false); 2302 animation->set_affects_active_elements(false);
2363 animations_impl->AddAnimation(std::move(animation)); 2303 player_impl_->AddAnimation(std::move(animation));
2364 2304
2365 std::unique_ptr<KeyframedTransformAnimationCurve> curve3( 2305 std::unique_ptr<KeyframedTransformAnimationCurve> curve3(
2366 KeyframedTransformAnimationCurve::Create()); 2306 KeyframedTransformAnimationCurve::Create());
2367 2307
2368 TransformOperations operations4; 2308 TransformOperations operations4;
2369 operations4.AppendScale(5.0, 3.0, 1.0); 2309 operations4.AppendScale(5.0, 3.0, 1.0);
2370 curve3->AddKeyframe( 2310 curve3->AddKeyframe(
2371 TransformKeyframe::Create(base::TimeDelta(), operations4, nullptr)); 2311 TransformKeyframe::Create(base::TimeDelta(), operations4, nullptr));
2372 TransformOperations operations5; 2312 TransformOperations operations5;
2373 curve3->AddKeyframe(TransformKeyframe::Create( 2313 curve3->AddKeyframe(TransformKeyframe::Create(
2374 base::TimeDelta::FromSecondsD(1.0), operations5, nullptr)); 2314 base::TimeDelta::FromSecondsD(1.0), operations5, nullptr));
2375 2315
2376 animation = 2316 animation =
2377 Animation::Create(std::move(curve3), 3, 3, TargetProperty::TRANSFORM); 2317 Animation::Create(std::move(curve3), 3, 3, TargetProperty::TRANSFORM);
2378 animation->set_affects_active_elements(false); 2318 animation->set_affects_active_elements(false);
2379 animations_impl->AddAnimation(std::move(animation)); 2319 player_impl_->AddAnimation(std::move(animation));
2380 2320
2381 EXPECT_TRUE(animations_impl->AnimationStartScale(ElementListType::PENDING, 2321 EXPECT_TRUE(player_impl_->AnimationStartScale(ElementListType::PENDING,
2382 &start_scale)); 2322 &start_scale));
2383 EXPECT_EQ(6.f, start_scale); 2323 EXPECT_EQ(6.f, start_scale);
2384 EXPECT_TRUE(animations_impl->AnimationStartScale(ElementListType::ACTIVE, 2324 EXPECT_TRUE(
2385 &start_scale)); 2325 player_impl_->AnimationStartScale(ElementListType::ACTIVE, &start_scale));
2386 EXPECT_EQ(0.f, start_scale); 2326 EXPECT_EQ(0.f, start_scale);
2387 2327
2388 animations_impl->ActivateAnimations(); 2328 player_impl_->ActivateAnimations();
2389 EXPECT_TRUE(animations_impl->AnimationStartScale(ElementListType::PENDING, 2329 EXPECT_TRUE(player_impl_->AnimationStartScale(ElementListType::PENDING,
2390 &start_scale)); 2330 &start_scale));
2391 EXPECT_EQ(6.f, start_scale); 2331 EXPECT_EQ(6.f, start_scale);
2392 EXPECT_TRUE(animations_impl->AnimationStartScale(ElementListType::ACTIVE, 2332 EXPECT_TRUE(
2393 &start_scale)); 2333 player_impl_->AnimationStartScale(ElementListType::ACTIVE, &start_scale));
2394 EXPECT_EQ(6.f, start_scale); 2334 EXPECT_EQ(6.f, start_scale);
2395 2335
2396 animations_impl->GetAnimationById(2)->SetRunState(Animation::FINISHED, 2336 player_impl_->GetAnimationById(2)->SetRunState(Animation::FINISHED,
2397 TicksFromSecondsF(0.0)); 2337 TicksFromSecondsF(0.0));
2398 2338
2399 // Only unfinished animations should be considered by 2339 // Only unfinished animations should be considered by
2400 // AnimationStartScale. 2340 // AnimationStartScale.
2401 EXPECT_TRUE(animations_impl->AnimationStartScale(ElementListType::PENDING, 2341 EXPECT_TRUE(player_impl_->AnimationStartScale(ElementListType::PENDING,
2402 &start_scale)); 2342 &start_scale));
2403 EXPECT_EQ(5.f, start_scale); 2343 EXPECT_EQ(5.f, start_scale);
2404 EXPECT_TRUE(animations_impl->AnimationStartScale(ElementListType::ACTIVE, 2344 EXPECT_TRUE(
2405 &start_scale)); 2345 player_impl_->AnimationStartScale(ElementListType::ACTIVE, &start_scale));
2406 EXPECT_EQ(5.f, start_scale); 2346 EXPECT_EQ(5.f, start_scale);
2407 } 2347 }
2408 2348
2409 TEST_F(ElementAnimationsTest, MaximumTargetScale) { 2349 TEST_F(ElementAnimationsTest, MaximumTargetScale) {
2410 CreateTestLayer(true, false); 2350 CreateTestLayer(true, false);
2411 AttachTimelinePlayerLayer(); 2351 AttachTimelinePlayerLayer();
2412 CreateImplTimelineAndPlayer(); 2352 CreateImplTimelineAndPlayer();
2413 2353
2414 scoped_refptr<ElementAnimations> animations_impl = element_animations_impl();
2415
2416 float max_scale = 0.f; 2354 float max_scale = 0.f;
2417 EXPECT_TRUE(animations_impl->MaximumTargetScale(ElementListType::PENDING, 2355 EXPECT_TRUE(
2418 &max_scale)); 2356 player_impl_->MaximumTargetScale(ElementListType::PENDING, &max_scale));
2419 EXPECT_EQ(0.f, max_scale); 2357 EXPECT_EQ(0.f, max_scale);
2420 EXPECT_TRUE( 2358 EXPECT_TRUE(
2421 animations_impl->MaximumTargetScale(ElementListType::ACTIVE, &max_scale)); 2359 player_impl_->MaximumTargetScale(ElementListType::ACTIVE, &max_scale));
2422 EXPECT_EQ(0.f, max_scale); 2360 EXPECT_EQ(0.f, max_scale);
2423 2361
2424 std::unique_ptr<KeyframedTransformAnimationCurve> curve1( 2362 std::unique_ptr<KeyframedTransformAnimationCurve> curve1(
2425 KeyframedTransformAnimationCurve::Create()); 2363 KeyframedTransformAnimationCurve::Create());
2426 2364
2427 TransformOperations operations1; 2365 TransformOperations operations1;
2428 curve1->AddKeyframe( 2366 curve1->AddKeyframe(
2429 TransformKeyframe::Create(base::TimeDelta(), operations1, nullptr)); 2367 TransformKeyframe::Create(base::TimeDelta(), operations1, nullptr));
2430 operations1.AppendScale(2.0, 3.0, 4.0); 2368 operations1.AppendScale(2.0, 3.0, 4.0);
2431 curve1->AddKeyframe(TransformKeyframe::Create( 2369 curve1->AddKeyframe(TransformKeyframe::Create(
2432 base::TimeDelta::FromSecondsD(1.0), operations1, nullptr)); 2370 base::TimeDelta::FromSecondsD(1.0), operations1, nullptr));
2433 2371
2434 std::unique_ptr<Animation> animation( 2372 std::unique_ptr<Animation> animation(
2435 Animation::Create(std::move(curve1), 1, 1, TargetProperty::TRANSFORM)); 2373 Animation::Create(std::move(curve1), 1, 1, TargetProperty::TRANSFORM));
2436 animation->set_affects_active_elements(false); 2374 animation->set_affects_active_elements(false);
2437 animations_impl->AddAnimation(std::move(animation)); 2375 player_impl_->AddAnimation(std::move(animation));
2438 2376
2439 EXPECT_TRUE(animations_impl->MaximumTargetScale(ElementListType::PENDING, 2377 EXPECT_TRUE(
2440 &max_scale)); 2378 player_impl_->MaximumTargetScale(ElementListType::PENDING, &max_scale));
2441 EXPECT_EQ(4.f, max_scale); 2379 EXPECT_EQ(4.f, max_scale);
2442 EXPECT_TRUE( 2380 EXPECT_TRUE(
2443 animations_impl->MaximumTargetScale(ElementListType::ACTIVE, &max_scale)); 2381 player_impl_->MaximumTargetScale(ElementListType::ACTIVE, &max_scale));
2444 EXPECT_EQ(0.f, max_scale); 2382 EXPECT_EQ(0.f, max_scale);
2445 2383
2446 animations_impl->ActivateAnimations(); 2384 player_impl_->ActivateAnimations();
2447 EXPECT_TRUE(animations_impl->MaximumTargetScale(ElementListType::PENDING, 2385 EXPECT_TRUE(
2448 &max_scale)); 2386 player_impl_->MaximumTargetScale(ElementListType::PENDING, &max_scale));
2449 EXPECT_EQ(4.f, max_scale); 2387 EXPECT_EQ(4.f, max_scale);
2450 EXPECT_TRUE( 2388 EXPECT_TRUE(
2451 animations_impl->MaximumTargetScale(ElementListType::ACTIVE, &max_scale)); 2389 player_impl_->MaximumTargetScale(ElementListType::ACTIVE, &max_scale));
2452 EXPECT_EQ(4.f, max_scale); 2390 EXPECT_EQ(4.f, max_scale);
2453 2391
2454 std::unique_ptr<KeyframedTransformAnimationCurve> curve2( 2392 std::unique_ptr<KeyframedTransformAnimationCurve> curve2(
2455 KeyframedTransformAnimationCurve::Create()); 2393 KeyframedTransformAnimationCurve::Create());
2456 2394
2457 TransformOperations operations2; 2395 TransformOperations operations2;
2458 curve2->AddKeyframe( 2396 curve2->AddKeyframe(
2459 TransformKeyframe::Create(base::TimeDelta(), operations2, nullptr)); 2397 TransformKeyframe::Create(base::TimeDelta(), operations2, nullptr));
2460 operations2.AppendScale(6.0, 5.0, 4.0); 2398 operations2.AppendScale(6.0, 5.0, 4.0);
2461 curve2->AddKeyframe(TransformKeyframe::Create( 2399 curve2->AddKeyframe(TransformKeyframe::Create(
2462 base::TimeDelta::FromSecondsD(1.0), operations2, nullptr)); 2400 base::TimeDelta::FromSecondsD(1.0), operations2, nullptr));
2463 2401
2464 animation = 2402 animation =
2465 Animation::Create(std::move(curve2), 2, 2, TargetProperty::TRANSFORM); 2403 Animation::Create(std::move(curve2), 2, 2, TargetProperty::TRANSFORM);
2466 animation->set_affects_active_elements(false); 2404 animation->set_affects_active_elements(false);
2467 animations_impl->AddAnimation(std::move(animation)); 2405 player_impl_->AddAnimation(std::move(animation));
2468 2406
2469 EXPECT_TRUE(animations_impl->MaximumTargetScale(ElementListType::PENDING, 2407 EXPECT_TRUE(
2470 &max_scale)); 2408 player_impl_->MaximumTargetScale(ElementListType::PENDING, &max_scale));
2471 EXPECT_EQ(6.f, max_scale); 2409 EXPECT_EQ(6.f, max_scale);
2472 EXPECT_TRUE( 2410 EXPECT_TRUE(
2473 animations_impl->MaximumTargetScale(ElementListType::ACTIVE, &max_scale)); 2411 player_impl_->MaximumTargetScale(ElementListType::ACTIVE, &max_scale));
2474 EXPECT_EQ(4.f, max_scale); 2412 EXPECT_EQ(4.f, max_scale);
2475 2413
2476 animations_impl->ActivateAnimations(); 2414 player_impl_->ActivateAnimations();
2477 EXPECT_TRUE(animations_impl->MaximumTargetScale(ElementListType::PENDING, 2415 EXPECT_TRUE(
2478 &max_scale)); 2416 player_impl_->MaximumTargetScale(ElementListType::PENDING, &max_scale));
2479 EXPECT_EQ(6.f, max_scale); 2417 EXPECT_EQ(6.f, max_scale);
2480 EXPECT_TRUE( 2418 EXPECT_TRUE(
2481 animations_impl->MaximumTargetScale(ElementListType::ACTIVE, &max_scale)); 2419 player_impl_->MaximumTargetScale(ElementListType::ACTIVE, &max_scale));
2482 EXPECT_EQ(6.f, max_scale); 2420 EXPECT_EQ(6.f, max_scale);
2483 2421
2484 std::unique_ptr<KeyframedTransformAnimationCurve> curve3( 2422 std::unique_ptr<KeyframedTransformAnimationCurve> curve3(
2485 KeyframedTransformAnimationCurve::Create()); 2423 KeyframedTransformAnimationCurve::Create());
2486 2424
2487 TransformOperations operations3; 2425 TransformOperations operations3;
2488 curve3->AddKeyframe( 2426 curve3->AddKeyframe(
2489 TransformKeyframe::Create(base::TimeDelta(), operations3, nullptr)); 2427 TransformKeyframe::Create(base::TimeDelta(), operations3, nullptr));
2490 operations3.AppendPerspective(6.0); 2428 operations3.AppendPerspective(6.0);
2491 curve3->AddKeyframe(TransformKeyframe::Create( 2429 curve3->AddKeyframe(TransformKeyframe::Create(
2492 base::TimeDelta::FromSecondsD(1.0), operations3, nullptr)); 2430 base::TimeDelta::FromSecondsD(1.0), operations3, nullptr));
2493 2431
2494 animation = 2432 animation =
2495 Animation::Create(std::move(curve3), 3, 3, TargetProperty::TRANSFORM); 2433 Animation::Create(std::move(curve3), 3, 3, TargetProperty::TRANSFORM);
2496 animation->set_affects_active_elements(false); 2434 animation->set_affects_active_elements(false);
2497 animations_impl->AddAnimation(std::move(animation)); 2435 player_impl_->AddAnimation(std::move(animation));
2498 2436
2499 EXPECT_FALSE(animations_impl->MaximumTargetScale(ElementListType::PENDING, 2437 EXPECT_FALSE(
2500 &max_scale)); 2438 player_impl_->MaximumTargetScale(ElementListType::PENDING, &max_scale));
2501 EXPECT_TRUE( 2439 EXPECT_TRUE(
2502 animations_impl->MaximumTargetScale(ElementListType::ACTIVE, &max_scale)); 2440 player_impl_->MaximumTargetScale(ElementListType::ACTIVE, &max_scale));
2503 EXPECT_EQ(6.f, max_scale); 2441 EXPECT_EQ(6.f, max_scale);
2504 2442
2505 animations_impl->ActivateAnimations(); 2443 player_impl_->ActivateAnimations();
2506 EXPECT_FALSE(animations_impl->MaximumTargetScale(ElementListType::PENDING,
2507 &max_scale));
2508 EXPECT_FALSE( 2444 EXPECT_FALSE(
2509 animations_impl->MaximumTargetScale(ElementListType::ACTIVE, &max_scale)); 2445 player_impl_->MaximumTargetScale(ElementListType::PENDING, &max_scale));
2446 EXPECT_FALSE(
2447 player_impl_->MaximumTargetScale(ElementListType::ACTIVE, &max_scale));
2510 2448
2511 animations_impl->GetAnimationById(3)->SetRunState(Animation::FINISHED, 2449 player_impl_->GetAnimationById(3)->SetRunState(Animation::FINISHED,
2512 TicksFromSecondsF(0.0)); 2450 TicksFromSecondsF(0.0));
2513 animations_impl->GetAnimationById(2)->SetRunState(Animation::FINISHED, 2451 player_impl_->GetAnimationById(2)->SetRunState(Animation::FINISHED,
2514 TicksFromSecondsF(0.0)); 2452 TicksFromSecondsF(0.0));
2515 2453
2516 // Only unfinished animations should be considered by 2454 // Only unfinished animations should be considered by
2517 // MaximumTargetScale. 2455 // MaximumTargetScale.
2518 EXPECT_TRUE(animations_impl->MaximumTargetScale(ElementListType::PENDING, 2456 EXPECT_TRUE(
2519 &max_scale)); 2457 player_impl_->MaximumTargetScale(ElementListType::PENDING, &max_scale));
2520 EXPECT_EQ(4.f, max_scale); 2458 EXPECT_EQ(4.f, max_scale);
2521 EXPECT_TRUE( 2459 EXPECT_TRUE(
2522 animations_impl->MaximumTargetScale(ElementListType::ACTIVE, &max_scale)); 2460 player_impl_->MaximumTargetScale(ElementListType::ACTIVE, &max_scale));
2523 EXPECT_EQ(4.f, max_scale); 2461 EXPECT_EQ(4.f, max_scale);
2524 } 2462 }
2525 2463
2526 TEST_F(ElementAnimationsTest, MaximumTargetScaleWithDirection) { 2464 TEST_F(ElementAnimationsTest, MaximumTargetScaleWithDirection) {
2527 CreateTestLayer(true, false); 2465 CreateTestLayer(true, false);
2528 AttachTimelinePlayerLayer(); 2466 AttachTimelinePlayerLayer();
2529 CreateImplTimelineAndPlayer(); 2467 CreateImplTimelineAndPlayer();
2530 2468
2531 scoped_refptr<ElementAnimations> animations_impl = element_animations_impl();
2532
2533 std::unique_ptr<KeyframedTransformAnimationCurve> curve1( 2469 std::unique_ptr<KeyframedTransformAnimationCurve> curve1(
2534 KeyframedTransformAnimationCurve::Create()); 2470 KeyframedTransformAnimationCurve::Create());
2535 TransformOperations operations1; 2471 TransformOperations operations1;
2536 operations1.AppendScale(1.0, 2.0, 3.0); 2472 operations1.AppendScale(1.0, 2.0, 3.0);
2537 curve1->AddKeyframe( 2473 curve1->AddKeyframe(
2538 TransformKeyframe::Create(base::TimeDelta(), operations1, nullptr)); 2474 TransformKeyframe::Create(base::TimeDelta(), operations1, nullptr));
2539 TransformOperations operations2; 2475 TransformOperations operations2;
2540 operations2.AppendScale(4.0, 5.0, 6.0); 2476 operations2.AppendScale(4.0, 5.0, 6.0);
2541 curve1->AddKeyframe(TransformKeyframe::Create( 2477 curve1->AddKeyframe(TransformKeyframe::Create(
2542 base::TimeDelta::FromSecondsD(1.0), operations2, nullptr)); 2478 base::TimeDelta::FromSecondsD(1.0), operations2, nullptr));
2543 2479
2544 std::unique_ptr<Animation> animation_owned( 2480 std::unique_ptr<Animation> animation_owned(
2545 Animation::Create(std::move(curve1), 1, 1, TargetProperty::TRANSFORM)); 2481 Animation::Create(std::move(curve1), 1, 1, TargetProperty::TRANSFORM));
2546 Animation* animation = animation_owned.get(); 2482 Animation* animation = animation_owned.get();
2547 animations_impl->AddAnimation(std::move(animation_owned)); 2483 player_impl_->AddAnimation(std::move(animation_owned));
2548 2484
2549 float max_scale = 0.f; 2485 float max_scale = 0.f;
2550 2486
2551 EXPECT_GT(animation->playback_rate(), 0.0); 2487 EXPECT_GT(animation->playback_rate(), 0.0);
2552 2488
2553 // NORMAL direction with positive playback rate. 2489 // NORMAL direction with positive playback rate.
2554 animation->set_direction(Animation::Direction::NORMAL); 2490 animation->set_direction(Animation::Direction::NORMAL);
2555 EXPECT_TRUE(animations_impl->MaximumTargetScale(ElementListType::PENDING, 2491 EXPECT_TRUE(
2556 &max_scale)); 2492 player_impl_->MaximumTargetScale(ElementListType::PENDING, &max_scale));
2557 EXPECT_EQ(6.f, max_scale); 2493 EXPECT_EQ(6.f, max_scale);
2558 EXPECT_TRUE( 2494 EXPECT_TRUE(
2559 animations_impl->MaximumTargetScale(ElementListType::ACTIVE, &max_scale)); 2495 player_impl_->MaximumTargetScale(ElementListType::ACTIVE, &max_scale));
2560 EXPECT_EQ(6.f, max_scale); 2496 EXPECT_EQ(6.f, max_scale);
2561 2497
2562 // ALTERNATE direction with positive playback rate. 2498 // ALTERNATE direction with positive playback rate.
2563 animation->set_direction(Animation::Direction::ALTERNATE_NORMAL); 2499 animation->set_direction(Animation::Direction::ALTERNATE_NORMAL);
2564 EXPECT_TRUE(animations_impl->MaximumTargetScale(ElementListType::PENDING, 2500 EXPECT_TRUE(
2565 &max_scale)); 2501 player_impl_->MaximumTargetScale(ElementListType::PENDING, &max_scale));
2566 EXPECT_EQ(6.f, max_scale); 2502 EXPECT_EQ(6.f, max_scale);
2567 EXPECT_TRUE( 2503 EXPECT_TRUE(
2568 animations_impl->MaximumTargetScale(ElementListType::ACTIVE, &max_scale)); 2504 player_impl_->MaximumTargetScale(ElementListType::ACTIVE, &max_scale));
2569 EXPECT_EQ(6.f, max_scale); 2505 EXPECT_EQ(6.f, max_scale);
2570 2506
2571 // REVERSE direction with positive playback rate. 2507 // REVERSE direction with positive playback rate.
2572 animation->set_direction(Animation::Direction::REVERSE); 2508 animation->set_direction(Animation::Direction::REVERSE);
2573 EXPECT_TRUE(animations_impl->MaximumTargetScale(ElementListType::PENDING, 2509 EXPECT_TRUE(
2574 &max_scale)); 2510 player_impl_->MaximumTargetScale(ElementListType::PENDING, &max_scale));
2575 EXPECT_EQ(3.f, max_scale); 2511 EXPECT_EQ(3.f, max_scale);
2576 EXPECT_TRUE( 2512 EXPECT_TRUE(
2577 animations_impl->MaximumTargetScale(ElementListType::ACTIVE, &max_scale)); 2513 player_impl_->MaximumTargetScale(ElementListType::ACTIVE, &max_scale));
2578 EXPECT_EQ(3.f, max_scale); 2514 EXPECT_EQ(3.f, max_scale);
2579 2515
2580 // ALTERNATE reverse direction. 2516 // ALTERNATE reverse direction.
2581 animation->set_direction(Animation::Direction::REVERSE); 2517 animation->set_direction(Animation::Direction::REVERSE);
2582 EXPECT_TRUE(animations_impl->MaximumTargetScale(ElementListType::PENDING, 2518 EXPECT_TRUE(
2583 &max_scale)); 2519 player_impl_->MaximumTargetScale(ElementListType::PENDING, &max_scale));
2584 EXPECT_EQ(3.f, max_scale); 2520 EXPECT_EQ(3.f, max_scale);
2585 EXPECT_TRUE( 2521 EXPECT_TRUE(
2586 animations_impl->MaximumTargetScale(ElementListType::ACTIVE, &max_scale)); 2522 player_impl_->MaximumTargetScale(ElementListType::ACTIVE, &max_scale));
2587 EXPECT_EQ(3.f, max_scale); 2523 EXPECT_EQ(3.f, max_scale);
2588 2524
2589 animation->set_playback_rate(-1.0); 2525 animation->set_playback_rate(-1.0);
2590 2526
2591 // NORMAL direction with negative playback rate. 2527 // NORMAL direction with negative playback rate.
2592 animation->set_direction(Animation::Direction::NORMAL); 2528 animation->set_direction(Animation::Direction::NORMAL);
2593 EXPECT_TRUE(animations_impl->MaximumTargetScale(ElementListType::PENDING, 2529 EXPECT_TRUE(
2594 &max_scale)); 2530 player_impl_->MaximumTargetScale(ElementListType::PENDING, &max_scale));
2595 EXPECT_EQ(3.f, max_scale); 2531 EXPECT_EQ(3.f, max_scale);
2596 EXPECT_TRUE( 2532 EXPECT_TRUE(
2597 animations_impl->MaximumTargetScale(ElementListType::ACTIVE, &max_scale)); 2533 player_impl_->MaximumTargetScale(ElementListType::ACTIVE, &max_scale));
2598 EXPECT_EQ(3.f, max_scale); 2534 EXPECT_EQ(3.f, max_scale);
2599 2535
2600 // ALTERNATE direction with negative playback rate. 2536 // ALTERNATE direction with negative playback rate.
2601 animation->set_direction(Animation::Direction::ALTERNATE_NORMAL); 2537 animation->set_direction(Animation::Direction::ALTERNATE_NORMAL);
2602 EXPECT_TRUE(animations_impl->MaximumTargetScale(ElementListType::PENDING, 2538 EXPECT_TRUE(
2603 &max_scale)); 2539 player_impl_->MaximumTargetScale(ElementListType::PENDING, &max_scale));
2604 EXPECT_EQ(3.f, max_scale); 2540 EXPECT_EQ(3.f, max_scale);
2605 EXPECT_TRUE( 2541 EXPECT_TRUE(
2606 animations_impl->MaximumTargetScale(ElementListType::ACTIVE, &max_scale)); 2542 player_impl_->MaximumTargetScale(ElementListType::ACTIVE, &max_scale));
2607 EXPECT_EQ(3.f, max_scale); 2543 EXPECT_EQ(3.f, max_scale);
2608 2544
2609 // REVERSE direction with negative playback rate. 2545 // REVERSE direction with negative playback rate.
2610 animation->set_direction(Animation::Direction::REVERSE); 2546 animation->set_direction(Animation::Direction::REVERSE);
2611 EXPECT_TRUE(animations_impl->MaximumTargetScale(ElementListType::PENDING, 2547 EXPECT_TRUE(
2612 &max_scale)); 2548 player_impl_->MaximumTargetScale(ElementListType::PENDING, &max_scale));
2613 EXPECT_EQ(6.f, max_scale); 2549 EXPECT_EQ(6.f, max_scale);
2614 EXPECT_TRUE( 2550 EXPECT_TRUE(
2615 animations_impl->MaximumTargetScale(ElementListType::ACTIVE, &max_scale)); 2551 player_impl_->MaximumTargetScale(ElementListType::ACTIVE, &max_scale));
2616 EXPECT_EQ(6.f, max_scale); 2552 EXPECT_EQ(6.f, max_scale);
2617 2553
2618 // ALTERNATE reverse direction with negative playback rate. 2554 // ALTERNATE reverse direction with negative playback rate.
2619 animation->set_direction(Animation::Direction::REVERSE); 2555 animation->set_direction(Animation::Direction::REVERSE);
2620 EXPECT_TRUE(animations_impl->MaximumTargetScale(ElementListType::PENDING, 2556 EXPECT_TRUE(
2621 &max_scale)); 2557 player_impl_->MaximumTargetScale(ElementListType::PENDING, &max_scale));
2622 EXPECT_EQ(6.f, max_scale); 2558 EXPECT_EQ(6.f, max_scale);
2623 EXPECT_TRUE( 2559 EXPECT_TRUE(
2624 animations_impl->MaximumTargetScale(ElementListType::ACTIVE, &max_scale)); 2560 player_impl_->MaximumTargetScale(ElementListType::ACTIVE, &max_scale));
2625 EXPECT_EQ(6.f, max_scale); 2561 EXPECT_EQ(6.f, max_scale);
2626 } 2562 }
2627 2563
2628 TEST_F(ElementAnimationsTest, NewlyPushedAnimationWaitsForActivation) { 2564 TEST_F(ElementAnimationsTest, NewlyPushedAnimationWaitsForActivation) {
2629 CreateTestLayer(true, true); 2565 CreateTestLayer(true, true);
2630 AttachTimelinePlayerLayer(); 2566 AttachTimelinePlayerLayer();
2631 CreateImplTimelineAndPlayer(); 2567 CreateImplTimelineAndPlayer();
2632 2568
2633 scoped_refptr<ElementAnimations> animations = element_animations();
2634 scoped_refptr<ElementAnimations> animations_impl = element_animations_impl();
2635
2636 auto events = host_impl_->CreateEvents(); 2569 auto events = host_impl_->CreateEvents();
2637 2570
2638 EXPECT_FALSE(animations->needs_to_start_animations_for_testing()); 2571 EXPECT_FALSE(player_->needs_to_start_animations());
2639 int animation_id = AddOpacityTransitionToElementAnimations( 2572 int animation_id =
2640 animations.get(), 1, 0.5f, 1.f, false); 2573 AddOpacityTransitionToPlayer(player_.get(), 1, 0.5f, 1.f, false);
2641 EXPECT_TRUE(animations->needs_to_start_animations_for_testing()); 2574 EXPECT_TRUE(player_->needs_to_start_animations());
2642 2575
2643 EXPECT_FALSE(animations_impl->needs_to_start_animations_for_testing()); 2576 EXPECT_FALSE(player_impl_->needs_to_start_animations());
2644 PushProperties(); 2577 PushProperties();
2645 EXPECT_TRUE(animations_impl->needs_to_start_animations_for_testing()); 2578 EXPECT_TRUE(player_impl_->needs_to_start_animations());
2646 2579
2647 EXPECT_TRUE(animations_impl->GetAnimationById(animation_id)); 2580 EXPECT_TRUE(player_impl_->GetAnimationById(animation_id));
2648 EXPECT_EQ(Animation::WAITING_FOR_TARGET_AVAILABILITY, 2581 EXPECT_EQ(Animation::WAITING_FOR_TARGET_AVAILABILITY,
2649 animations_impl->GetAnimationById(animation_id)->run_state()); 2582 player_impl_->GetAnimationById(animation_id)->run_state());
2650 EXPECT_TRUE(animations_impl->GetAnimationById(animation_id) 2583 EXPECT_TRUE(
2651 ->affects_pending_elements()); 2584 player_impl_->GetAnimationById(animation_id)->affects_pending_elements());
2652 EXPECT_FALSE(animations_impl->GetAnimationById(animation_id) 2585 EXPECT_FALSE(
2653 ->affects_active_elements()); 2586 player_impl_->GetAnimationById(animation_id)->affects_active_elements());
2654 2587
2655 animations_impl->Animate(kInitialTickTime); 2588 element_animations_impl_->Animate(kInitialTickTime);
2656 EXPECT_FALSE(animations_impl->needs_to_start_animations_for_testing()); 2589 EXPECT_FALSE(player_impl_->needs_to_start_animations());
2657 animations_impl->UpdateState(true, events.get()); 2590 element_animations_impl_->UpdateState(true, events.get());
2658 2591
2659 // Since the animation hasn't been activated, it should still be STARTING 2592 // Since the animation hasn't been activated, it should still be STARTING
2660 // rather than RUNNING. 2593 // rather than RUNNING.
2661 EXPECT_EQ(Animation::STARTING, 2594 EXPECT_EQ(Animation::STARTING,
2662 animations_impl->GetAnimationById(animation_id)->run_state()); 2595 player_impl_->GetAnimationById(animation_id)->run_state());
2663 2596
2664 // Since the animation hasn't been activated, only the pending observer 2597 // Since the animation hasn't been activated, only the pending observer
2665 // should have been ticked. 2598 // should have been ticked.
2666 EXPECT_EQ(0.5f, 2599 EXPECT_EQ(0.5f,
2667 client_impl_.GetOpacity(element_id_, ElementListType::PENDING)); 2600 client_impl_.GetOpacity(element_id_, ElementListType::PENDING));
2668 EXPECT_EQ(0.f, client_impl_.GetOpacity(element_id_, ElementListType::ACTIVE)); 2601 EXPECT_EQ(0.f, client_impl_.GetOpacity(element_id_, ElementListType::ACTIVE));
2669 2602
2670 animations_impl->ActivateAnimations(); 2603 player_impl_->ActivateAnimations();
2671 EXPECT_TRUE(animations_impl->GetAnimationById(animation_id) 2604 EXPECT_TRUE(
2672 ->affects_pending_elements()); 2605 player_impl_->GetAnimationById(animation_id)->affects_pending_elements());
2673 EXPECT_TRUE(animations_impl->GetAnimationById(animation_id) 2606 EXPECT_TRUE(
2674 ->affects_active_elements()); 2607 player_impl_->GetAnimationById(animation_id)->affects_active_elements());
2675 2608
2676 animations_impl->Animate(kInitialTickTime + 2609 element_animations_impl_->Animate(kInitialTickTime +
2677 TimeDelta::FromMilliseconds(1000)); 2610 TimeDelta::FromMilliseconds(1000));
2678 animations_impl->UpdateState(true, events.get()); 2611 element_animations_impl_->UpdateState(true, events.get());
2679 2612
2680 // Since the animation has been activated, it should have reached the 2613 // Since the animation has been activated, it should have reached the
2681 // RUNNING state and the active observer should start to get ticked. 2614 // RUNNING state and the active observer should start to get ticked.
2682 EXPECT_EQ(Animation::RUNNING, 2615 EXPECT_EQ(Animation::RUNNING,
2683 animations_impl->GetAnimationById(animation_id)->run_state()); 2616 player_impl_->GetAnimationById(animation_id)->run_state());
2684 EXPECT_EQ(0.5f, 2617 EXPECT_EQ(0.5f,
2685 client_impl_.GetOpacity(element_id_, ElementListType::PENDING)); 2618 client_impl_.GetOpacity(element_id_, ElementListType::PENDING));
2686 EXPECT_EQ(0.5f, 2619 EXPECT_EQ(0.5f,
2687 client_impl_.GetOpacity(element_id_, ElementListType::ACTIVE)); 2620 client_impl_.GetOpacity(element_id_, ElementListType::ACTIVE));
2688 } 2621 }
2689 2622
2690 TEST_F(ElementAnimationsTest, ActivationBetweenAnimateAndUpdateState) { 2623 TEST_F(ElementAnimationsTest, ActivationBetweenAnimateAndUpdateState) {
2691 CreateTestLayer(true, true); 2624 CreateTestLayer(true, true);
2692 AttachTimelinePlayerLayer(); 2625 AttachTimelinePlayerLayer();
2693 CreateImplTimelineAndPlayer(); 2626 CreateImplTimelineAndPlayer();
2694 2627
2695 scoped_refptr<ElementAnimations> animations = element_animations();
2696 scoped_refptr<ElementAnimations> animations_impl = element_animations_impl();
2697
2698 auto events = host_impl_->CreateEvents(); 2628 auto events = host_impl_->CreateEvents();
2699 2629
2700 const int animation_id = AddOpacityTransitionToElementAnimations( 2630 const int animation_id =
2701 animations.get(), 1, 0.5f, 1.f, true); 2631 AddOpacityTransitionToPlayer(player_.get(), 1, 0.5f, 1.f, true);
2702 2632
2703 PushProperties(); 2633 PushProperties();
2704 2634
2705 EXPECT_TRUE(animations_impl->GetAnimationById(animation_id)); 2635 EXPECT_TRUE(player_impl_->GetAnimationById(animation_id));
2706 EXPECT_EQ(Animation::WAITING_FOR_TARGET_AVAILABILITY, 2636 EXPECT_EQ(Animation::WAITING_FOR_TARGET_AVAILABILITY,
2707 animations_impl->GetAnimationById(animation_id)->run_state()); 2637 player_impl_->GetAnimationById(animation_id)->run_state());
2708 EXPECT_TRUE(animations_impl->GetAnimationById(animation_id) 2638 EXPECT_TRUE(
2709 ->affects_pending_elements()); 2639 player_impl_->GetAnimationById(animation_id)->affects_pending_elements());
2710 EXPECT_FALSE(animations_impl->GetAnimationById(animation_id) 2640 EXPECT_FALSE(
2711 ->affects_active_elements()); 2641 player_impl_->GetAnimationById(animation_id)->affects_active_elements());
2712 2642
2713 animations_impl->Animate(kInitialTickTime); 2643 element_animations_impl_->Animate(kInitialTickTime);
2714 2644
2715 // Since the animation hasn't been activated, only the pending observer 2645 // Since the animation hasn't been activated, only the pending observer
2716 // should have been ticked. 2646 // should have been ticked.
2717 EXPECT_EQ(0.5f, 2647 EXPECT_EQ(0.5f,
2718 client_impl_.GetOpacity(element_id_, ElementListType::PENDING)); 2648 client_impl_.GetOpacity(element_id_, ElementListType::PENDING));
2719 EXPECT_EQ(0.f, client_impl_.GetOpacity(element_id_, ElementListType::ACTIVE)); 2649 EXPECT_EQ(0.f, client_impl_.GetOpacity(element_id_, ElementListType::ACTIVE));
2720 2650
2721 animations_impl->ActivateAnimations(); 2651 player_impl_->ActivateAnimations();
2722 EXPECT_TRUE(animations_impl->GetAnimationById(animation_id) 2652 EXPECT_TRUE(
2723 ->affects_pending_elements()); 2653 player_impl_->GetAnimationById(animation_id)->affects_pending_elements());
2724 EXPECT_TRUE(animations_impl->GetAnimationById(animation_id) 2654 EXPECT_TRUE(
2725 ->affects_active_elements()); 2655 player_impl_->GetAnimationById(animation_id)->affects_active_elements());
2726 2656
2727 animations_impl->UpdateState(true, events.get()); 2657 element_animations_impl_->UpdateState(true, events.get());
2728 2658
2729 // Since the animation has been activated, it should have reached the 2659 // Since the animation has been activated, it should have reached the
2730 // RUNNING state. 2660 // RUNNING state.
2731 EXPECT_EQ(Animation::RUNNING, 2661 EXPECT_EQ(Animation::RUNNING,
2732 animations_impl->GetAnimationById(animation_id)->run_state()); 2662 player_impl_->GetAnimationById(animation_id)->run_state());
2733 2663
2734 animations_impl->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(500)); 2664 element_animations_impl_->Animate(kInitialTickTime +
2665 TimeDelta::FromMilliseconds(500));
2735 2666
2736 // Both elements should have been ticked. 2667 // Both elements should have been ticked.
2737 EXPECT_EQ(0.75f, 2668 EXPECT_EQ(0.75f,
2738 client_impl_.GetOpacity(element_id_, ElementListType::PENDING)); 2669 client_impl_.GetOpacity(element_id_, ElementListType::PENDING));
2739 EXPECT_EQ(0.75f, 2670 EXPECT_EQ(0.75f,
2740 client_impl_.GetOpacity(element_id_, ElementListType::ACTIVE)); 2671 client_impl_.GetOpacity(element_id_, ElementListType::ACTIVE));
2741 } 2672 }
2742 2673
2743 TEST_F(ElementAnimationsTest, ObserverNotifiedWhenTransformAnimationChanges) { 2674 TEST_F(ElementAnimationsTest, ObserverNotifiedWhenTransformAnimationChanges) {
2744 CreateTestLayer(true, true); 2675 CreateTestLayer(true, true);
2745 AttachTimelinePlayerLayer(); 2676 AttachTimelinePlayerLayer();
2746 CreateImplTimelineAndPlayer(); 2677 CreateImplTimelineAndPlayer();
2747 2678
2748 scoped_refptr<ElementAnimations> animations = element_animations();
2749 scoped_refptr<ElementAnimations> animations_impl = element_animations_impl();
2750
2751 auto events = host_impl_->CreateEvents(); 2679 auto events = host_impl_->CreateEvents();
2752 2680
2753 EXPECT_FALSE(client_.GetHasPotentialTransformAnimation( 2681 EXPECT_FALSE(client_.GetHasPotentialTransformAnimation(
2754 element_id_, ElementListType::ACTIVE)); 2682 element_id_, ElementListType::ACTIVE));
2755 EXPECT_FALSE(client_.GetTransformIsCurrentlyAnimating( 2683 EXPECT_FALSE(client_.GetTransformIsCurrentlyAnimating(
2756 element_id_, ElementListType::ACTIVE)); 2684 element_id_, ElementListType::ACTIVE));
2757 EXPECT_FALSE(client_impl_.GetHasPotentialTransformAnimation( 2685 EXPECT_FALSE(client_impl_.GetHasPotentialTransformAnimation(
2758 element_id_, ElementListType::PENDING)); 2686 element_id_, ElementListType::PENDING));
2759 EXPECT_FALSE(client_impl_.GetTransformIsCurrentlyAnimating( 2687 EXPECT_FALSE(client_impl_.GetTransformIsCurrentlyAnimating(
2760 element_id_, ElementListType::PENDING)); 2688 element_id_, ElementListType::PENDING));
2761 EXPECT_FALSE(client_impl_.GetHasPotentialTransformAnimation( 2689 EXPECT_FALSE(client_impl_.GetHasPotentialTransformAnimation(
2762 element_id_, ElementListType::ACTIVE)); 2690 element_id_, ElementListType::ACTIVE));
2763 EXPECT_FALSE(client_impl_.GetTransformIsCurrentlyAnimating( 2691 EXPECT_FALSE(client_impl_.GetTransformIsCurrentlyAnimating(
2764 element_id_, ElementListType::ACTIVE)); 2692 element_id_, ElementListType::ACTIVE));
2765 2693
2766 // Case 1: An animation that's allowed to run until its finish point. 2694 // Case 1: An animation that's allowed to run until its finish point.
2767 AddAnimatedTransformToElementAnimations(animations.get(), 1.0, 1, 1); 2695 AddAnimatedTransformToPlayer(player_.get(), 1.0, 1, 1);
2768 EXPECT_TRUE(client_.GetHasPotentialTransformAnimation( 2696 EXPECT_TRUE(client_.GetHasPotentialTransformAnimation(
2769 element_id_, ElementListType::ACTIVE)); 2697 element_id_, ElementListType::ACTIVE));
2770 EXPECT_TRUE(client_.GetTransformIsCurrentlyAnimating( 2698 EXPECT_TRUE(client_.GetTransformIsCurrentlyAnimating(
2771 element_id_, ElementListType::ACTIVE)); 2699 element_id_, ElementListType::ACTIVE));
2772 2700
2773 PushProperties(); 2701 PushProperties();
2774 EXPECT_TRUE(client_impl_.GetHasPotentialTransformAnimation( 2702 EXPECT_TRUE(client_impl_.GetHasPotentialTransformAnimation(
2775 element_id_, ElementListType::PENDING)); 2703 element_id_, ElementListType::PENDING));
2776 EXPECT_TRUE(client_impl_.GetTransformIsCurrentlyAnimating( 2704 EXPECT_TRUE(client_impl_.GetTransformIsCurrentlyAnimating(
2777 element_id_, ElementListType::PENDING)); 2705 element_id_, ElementListType::PENDING));
2778 EXPECT_FALSE(client_impl_.GetHasPotentialTransformAnimation( 2706 EXPECT_FALSE(client_impl_.GetHasPotentialTransformAnimation(
2779 element_id_, ElementListType::ACTIVE)); 2707 element_id_, ElementListType::ACTIVE));
2780 EXPECT_FALSE(client_impl_.GetTransformIsCurrentlyAnimating( 2708 EXPECT_FALSE(client_impl_.GetTransformIsCurrentlyAnimating(
2781 element_id_, ElementListType::ACTIVE)); 2709 element_id_, ElementListType::ACTIVE));
2782 2710
2783 animations_impl->ActivateAnimations(); 2711 element_animations_impl_->ActivateAnimations();
2784 EXPECT_TRUE(client_impl_.GetHasPotentialTransformAnimation( 2712 EXPECT_TRUE(client_impl_.GetHasPotentialTransformAnimation(
2785 element_id_, ElementListType::PENDING)); 2713 element_id_, ElementListType::PENDING));
2786 EXPECT_TRUE(client_impl_.GetTransformIsCurrentlyAnimating( 2714 EXPECT_TRUE(client_impl_.GetTransformIsCurrentlyAnimating(
2787 element_id_, ElementListType::PENDING)); 2715 element_id_, ElementListType::PENDING));
2788 EXPECT_TRUE(client_impl_.GetHasPotentialTransformAnimation( 2716 EXPECT_TRUE(client_impl_.GetHasPotentialTransformAnimation(
2789 element_id_, ElementListType::ACTIVE)); 2717 element_id_, ElementListType::ACTIVE));
2790 EXPECT_TRUE(client_impl_.GetTransformIsCurrentlyAnimating( 2718 EXPECT_TRUE(client_impl_.GetTransformIsCurrentlyAnimating(
2791 element_id_, ElementListType::ACTIVE)); 2719 element_id_, ElementListType::ACTIVE));
2792 2720
2793 animations_impl->Animate(kInitialTickTime); 2721 element_animations_impl_->Animate(kInitialTickTime);
2794 animations_impl->UpdateState(true, events.get()); 2722 element_animations_impl_->UpdateState(true, events.get());
2795 2723
2796 animations->NotifyAnimationStarted(events->events_[0]); 2724 player_->NotifyAnimationStarted(events->events_[0]);
2797 events->events_.clear(); 2725 events->events_.clear();
2798 2726
2799 // Finish the animation. 2727 // Finish the animation.
2800 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1000)); 2728 element_animations_->Animate(kInitialTickTime +
2801 animations->UpdateState(true, nullptr); 2729 TimeDelta::FromMilliseconds(1000));
2730 element_animations_->UpdateState(true, nullptr);
2802 EXPECT_FALSE(client_.GetHasPotentialTransformAnimation( 2731 EXPECT_FALSE(client_.GetHasPotentialTransformAnimation(
2803 element_id_, ElementListType::ACTIVE)); 2732 element_id_, ElementListType::ACTIVE));
2804 EXPECT_FALSE(client_.GetTransformIsCurrentlyAnimating( 2733 EXPECT_FALSE(client_.GetTransformIsCurrentlyAnimating(
2805 element_id_, ElementListType::ACTIVE)); 2734 element_id_, ElementListType::ACTIVE));
2806 2735
2807 PushProperties(); 2736 PushProperties();
2808 2737
2809 // animations_impl hasn't yet ticked at/past the end of the animation. 2738 // animations_impl hasn't yet ticked at/past the end of the animation.
2810 EXPECT_TRUE(client_impl_.GetHasPotentialTransformAnimation( 2739 EXPECT_TRUE(client_impl_.GetHasPotentialTransformAnimation(
2811 element_id_, ElementListType::PENDING)); 2740 element_id_, ElementListType::PENDING));
2812 EXPECT_TRUE(client_impl_.GetTransformIsCurrentlyAnimating( 2741 EXPECT_TRUE(client_impl_.GetTransformIsCurrentlyAnimating(
2813 element_id_, ElementListType::PENDING)); 2742 element_id_, ElementListType::PENDING));
2814 EXPECT_TRUE(client_impl_.GetHasPotentialTransformAnimation( 2743 EXPECT_TRUE(client_impl_.GetHasPotentialTransformAnimation(
2815 element_id_, ElementListType::ACTIVE)); 2744 element_id_, ElementListType::ACTIVE));
2816 EXPECT_TRUE(client_impl_.GetTransformIsCurrentlyAnimating( 2745 EXPECT_TRUE(client_impl_.GetTransformIsCurrentlyAnimating(
2817 element_id_, ElementListType::ACTIVE)); 2746 element_id_, ElementListType::ACTIVE));
2818 2747
2819 animations_impl->Animate(kInitialTickTime + 2748 element_animations_impl_->Animate(kInitialTickTime +
2820 TimeDelta::FromMilliseconds(1000)); 2749 TimeDelta::FromMilliseconds(1000));
2821 animations_impl->UpdateState(true, events.get()); 2750 element_animations_impl_->UpdateState(true, events.get());
2822 EXPECT_FALSE(client_impl_.GetHasPotentialTransformAnimation( 2751 EXPECT_FALSE(client_impl_.GetHasPotentialTransformAnimation(
2823 element_id_, ElementListType::PENDING)); 2752 element_id_, ElementListType::PENDING));
2824 EXPECT_FALSE(client_impl_.GetTransformIsCurrentlyAnimating( 2753 EXPECT_FALSE(client_impl_.GetTransformIsCurrentlyAnimating(
2825 element_id_, ElementListType::PENDING)); 2754 element_id_, ElementListType::PENDING));
2826 EXPECT_FALSE(client_impl_.GetHasPotentialTransformAnimation( 2755 EXPECT_FALSE(client_impl_.GetHasPotentialTransformAnimation(
2827 element_id_, ElementListType::ACTIVE)); 2756 element_id_, ElementListType::ACTIVE));
2828 EXPECT_FALSE(client_impl_.GetTransformIsCurrentlyAnimating( 2757 EXPECT_FALSE(client_impl_.GetTransformIsCurrentlyAnimating(
2829 element_id_, ElementListType::ACTIVE)); 2758 element_id_, ElementListType::ACTIVE));
2830 2759
2831 // Case 2: An animation that's removed before it finishes. 2760 // Case 2: An animation that's removed before it finishes.
2832 int animation_id = 2761 int animation_id = AddAnimatedTransformToPlayer(player_.get(), 10.0, 2, 2);
2833 AddAnimatedTransformToElementAnimations(animations.get(), 10.0, 2, 2); 2762 int animation2_id = AddAnimatedTransformToPlayer(player_.get(), 10.0, 2, 1);
2834 int animation2_id = 2763 player_->GetAnimationById(animation2_id)
2835 AddAnimatedTransformToElementAnimations(animations.get(), 10.0, 2, 1);
2836 animations->GetAnimationById(animation2_id)
2837 ->set_time_offset(base::TimeDelta::FromMilliseconds(-10000)); 2764 ->set_time_offset(base::TimeDelta::FromMilliseconds(-10000));
2838 animations->GetAnimationById(animation2_id) 2765 player_->GetAnimationById(animation2_id)
2839 ->set_fill_mode(Animation::FillMode::NONE); 2766 ->set_fill_mode(Animation::FillMode::NONE);
2840 EXPECT_TRUE(client_.GetHasPotentialTransformAnimation( 2767 EXPECT_TRUE(client_.GetHasPotentialTransformAnimation(
2841 element_id_, ElementListType::ACTIVE)); 2768 element_id_, ElementListType::ACTIVE));
2842 EXPECT_TRUE(client_.GetTransformIsCurrentlyAnimating( 2769 EXPECT_TRUE(client_.GetTransformIsCurrentlyAnimating(
2843 element_id_, ElementListType::ACTIVE)); 2770 element_id_, ElementListType::ACTIVE));
2844 2771
2845 PushProperties(); 2772 PushProperties();
2846 EXPECT_TRUE(client_impl_.GetHasPotentialTransformAnimation( 2773 EXPECT_TRUE(client_impl_.GetHasPotentialTransformAnimation(
2847 element_id_, ElementListType::PENDING)); 2774 element_id_, ElementListType::PENDING));
2848 EXPECT_TRUE(client_impl_.GetTransformIsCurrentlyAnimating( 2775 EXPECT_TRUE(client_impl_.GetTransformIsCurrentlyAnimating(
2849 element_id_, ElementListType::PENDING)); 2776 element_id_, ElementListType::PENDING));
2850 EXPECT_FALSE(client_impl_.GetHasPotentialTransformAnimation( 2777 EXPECT_FALSE(client_impl_.GetHasPotentialTransformAnimation(
2851 element_id_, ElementListType::ACTIVE)); 2778 element_id_, ElementListType::ACTIVE));
2852 EXPECT_FALSE(client_impl_.GetTransformIsCurrentlyAnimating( 2779 EXPECT_FALSE(client_impl_.GetTransformIsCurrentlyAnimating(
2853 element_id_, ElementListType::ACTIVE)); 2780 element_id_, ElementListType::ACTIVE));
2854 2781
2855 animations_impl->ActivateAnimations(); 2782 element_animations_impl_->ActivateAnimations();
2856 EXPECT_TRUE(client_impl_.GetHasPotentialTransformAnimation( 2783 EXPECT_TRUE(client_impl_.GetHasPotentialTransformAnimation(
2857 element_id_, ElementListType::ACTIVE)); 2784 element_id_, ElementListType::ACTIVE));
2858 // animation1 is in effect currently and animation2 isn't. As the element has 2785 // animation1 is in effect currently and animation2 isn't. As the element has
2859 // atleast one animation that's in effect currently, client should be notified 2786 // atleast one animation that's in effect currently, client should be notified
2860 // that the transform is currently animating. 2787 // that the transform is currently animating.
2861 EXPECT_TRUE(client_impl_.GetTransformIsCurrentlyAnimating( 2788 EXPECT_TRUE(client_impl_.GetTransformIsCurrentlyAnimating(
2862 element_id_, ElementListType::ACTIVE)); 2789 element_id_, ElementListType::ACTIVE));
2863 2790
2864 animations_impl->Animate(kInitialTickTime + 2791 element_animations_impl_->Animate(kInitialTickTime +
2865 TimeDelta::FromMilliseconds(2000)); 2792 TimeDelta::FromMilliseconds(2000));
2866 animations_impl->UpdateState(true, events.get()); 2793 element_animations_impl_->UpdateState(true, events.get());
2867 2794
2868 animations->NotifyAnimationStarted(events->events_[0]); 2795 player_->NotifyAnimationStarted(events->events_[0]);
2869 events->events_.clear(); 2796 events->events_.clear();
2870 2797
2871 animations->RemoveAnimation(animation_id); 2798 player_->RemoveAnimation(animation_id);
2872 animations->RemoveAnimation(animation2_id); 2799 player_->RemoveAnimation(animation2_id);
2873 EXPECT_FALSE(client_.GetHasPotentialTransformAnimation( 2800 EXPECT_FALSE(client_.GetHasPotentialTransformAnimation(
2874 element_id_, ElementListType::ACTIVE)); 2801 element_id_, ElementListType::ACTIVE));
2875 EXPECT_FALSE(client_.GetTransformIsCurrentlyAnimating( 2802 EXPECT_FALSE(client_.GetTransformIsCurrentlyAnimating(
2876 element_id_, ElementListType::ACTIVE)); 2803 element_id_, ElementListType::ACTIVE));
2877 2804
2878 PushProperties(); 2805 PushProperties();
2879 EXPECT_FALSE(client_impl_.GetHasPotentialTransformAnimation( 2806 EXPECT_FALSE(client_impl_.GetHasPotentialTransformAnimation(
2880 element_id_, ElementListType::PENDING)); 2807 element_id_, ElementListType::PENDING));
2881 EXPECT_FALSE(client_impl_.GetTransformIsCurrentlyAnimating( 2808 EXPECT_FALSE(client_impl_.GetTransformIsCurrentlyAnimating(
2882 element_id_, ElementListType::PENDING)); 2809 element_id_, ElementListType::PENDING));
2883 EXPECT_TRUE(client_impl_.GetHasPotentialTransformAnimation( 2810 EXPECT_TRUE(client_impl_.GetHasPotentialTransformAnimation(
2884 element_id_, ElementListType::ACTIVE)); 2811 element_id_, ElementListType::ACTIVE));
2885 EXPECT_TRUE(client_impl_.GetTransformIsCurrentlyAnimating( 2812 EXPECT_TRUE(client_impl_.GetTransformIsCurrentlyAnimating(
2886 element_id_, ElementListType::ACTIVE)); 2813 element_id_, ElementListType::ACTIVE));
2887 2814
2888 animations_impl->ActivateAnimations(); 2815 element_animations_impl_->ActivateAnimations();
2889 EXPECT_FALSE(client_impl_.GetHasPotentialTransformAnimation( 2816 EXPECT_FALSE(client_impl_.GetHasPotentialTransformAnimation(
2890 element_id_, ElementListType::ACTIVE)); 2817 element_id_, ElementListType::ACTIVE));
2891 EXPECT_FALSE(client_impl_.GetTransformIsCurrentlyAnimating( 2818 EXPECT_FALSE(client_impl_.GetTransformIsCurrentlyAnimating(
2892 element_id_, ElementListType::ACTIVE)); 2819 element_id_, ElementListType::ACTIVE));
2893 2820
2894 // Case 3: An animation that's aborted before it finishes. 2821 // Case 3: An animation that's aborted before it finishes.
2895 animation_id = 2822 animation_id = AddAnimatedTransformToPlayer(player_.get(), 10.0, 3, 3);
2896 AddAnimatedTransformToElementAnimations(animations.get(), 10.0, 3, 3);
2897 EXPECT_TRUE(client_.GetHasPotentialTransformAnimation( 2823 EXPECT_TRUE(client_.GetHasPotentialTransformAnimation(
2898 element_id_, ElementListType::ACTIVE)); 2824 element_id_, ElementListType::ACTIVE));
2899 EXPECT_TRUE(client_.GetTransformIsCurrentlyAnimating( 2825 EXPECT_TRUE(client_.GetTransformIsCurrentlyAnimating(
2900 element_id_, ElementListType::ACTIVE)); 2826 element_id_, ElementListType::ACTIVE));
2901 2827
2902 PushProperties(); 2828 PushProperties();
2903 EXPECT_TRUE(client_impl_.GetHasPotentialTransformAnimation( 2829 EXPECT_TRUE(client_impl_.GetHasPotentialTransformAnimation(
2904 element_id_, ElementListType::PENDING)); 2830 element_id_, ElementListType::PENDING));
2905 EXPECT_TRUE(client_impl_.GetTransformIsCurrentlyAnimating( 2831 EXPECT_TRUE(client_impl_.GetTransformIsCurrentlyAnimating(
2906 element_id_, ElementListType::PENDING)); 2832 element_id_, ElementListType::PENDING));
2907 EXPECT_FALSE(client_impl_.GetHasPotentialTransformAnimation( 2833 EXPECT_FALSE(client_impl_.GetHasPotentialTransformAnimation(
2908 element_id_, ElementListType::ACTIVE)); 2834 element_id_, ElementListType::ACTIVE));
2909 EXPECT_FALSE(client_impl_.GetTransformIsCurrentlyAnimating( 2835 EXPECT_FALSE(client_impl_.GetTransformIsCurrentlyAnimating(
2910 element_id_, ElementListType::ACTIVE)); 2836 element_id_, ElementListType::ACTIVE));
2911 2837
2912 animations_impl->ActivateAnimations(); 2838 element_animations_impl_->ActivateAnimations();
2913 EXPECT_TRUE(client_impl_.GetHasPotentialTransformAnimation( 2839 EXPECT_TRUE(client_impl_.GetHasPotentialTransformAnimation(
2914 element_id_, ElementListType::ACTIVE)); 2840 element_id_, ElementListType::ACTIVE));
2915 EXPECT_TRUE(client_impl_.GetTransformIsCurrentlyAnimating( 2841 EXPECT_TRUE(client_impl_.GetTransformIsCurrentlyAnimating(
2916 element_id_, ElementListType::ACTIVE)); 2842 element_id_, ElementListType::ACTIVE));
2917 2843
2918 animations_impl->Animate(kInitialTickTime + 2844 element_animations_impl_->Animate(kInitialTickTime +
2919 TimeDelta::FromMilliseconds(2000)); 2845 TimeDelta::FromMilliseconds(2000));
2920 animations_impl->UpdateState(true, events.get()); 2846 element_animations_impl_->UpdateState(true, events.get());
2921 2847
2922 animations->NotifyAnimationStarted(events->events_[0]); 2848 player_->NotifyAnimationStarted(events->events_[0]);
2923 events->events_.clear(); 2849 events->events_.clear();
2924 2850
2925 animations_impl->AbortAnimations(TargetProperty::TRANSFORM); 2851 player_impl_->AbortAnimations(TargetProperty::TRANSFORM, false);
2926 EXPECT_FALSE(client_impl_.GetHasPotentialTransformAnimation( 2852 EXPECT_FALSE(client_impl_.GetHasPotentialTransformAnimation(
2927 element_id_, ElementListType::PENDING)); 2853 element_id_, ElementListType::PENDING));
2928 EXPECT_FALSE(client_impl_.GetTransformIsCurrentlyAnimating( 2854 EXPECT_FALSE(client_impl_.GetTransformIsCurrentlyAnimating(
2929 element_id_, ElementListType::PENDING)); 2855 element_id_, ElementListType::PENDING));
2930 EXPECT_FALSE(client_impl_.GetHasPotentialTransformAnimation( 2856 EXPECT_FALSE(client_impl_.GetHasPotentialTransformAnimation(
2931 element_id_, ElementListType::ACTIVE)); 2857 element_id_, ElementListType::ACTIVE));
2932 EXPECT_FALSE(client_impl_.GetTransformIsCurrentlyAnimating( 2858 EXPECT_FALSE(client_impl_.GetTransformIsCurrentlyAnimating(
2933 element_id_, ElementListType::ACTIVE)); 2859 element_id_, ElementListType::ACTIVE));
2934 2860
2935 animations_impl->Animate(kInitialTickTime + 2861 element_animations_impl_->Animate(kInitialTickTime +
2936 TimeDelta::FromMilliseconds(4000)); 2862 TimeDelta::FromMilliseconds(4000));
2937 animations_impl->UpdateState(true, events.get()); 2863 element_animations_impl_->UpdateState(true, events.get());
2938 2864
2939 animations->NotifyAnimationAborted(events->events_[0]); 2865 element_animations_->NotifyAnimationAborted(events->events_[0]);
2940 EXPECT_FALSE(client_.GetHasPotentialTransformAnimation( 2866 EXPECT_FALSE(client_.GetHasPotentialTransformAnimation(
2941 element_id_, ElementListType::ACTIVE)); 2867 element_id_, ElementListType::ACTIVE));
2942 EXPECT_FALSE(client_.GetTransformIsCurrentlyAnimating( 2868 EXPECT_FALSE(client_.GetTransformIsCurrentlyAnimating(
2943 element_id_, ElementListType::ACTIVE)); 2869 element_id_, ElementListType::ACTIVE));
2944 2870
2945 // Case 4 : An animation that's not in effect. 2871 // Case 4 : An animation that's not in effect.
2946 animation_id = 2872 animation_id = AddAnimatedTransformToPlayer(player_.get(), 1.0, 1, 6);
2947 AddAnimatedTransformToElementAnimations(animations.get(), 1.0, 1, 6); 2873 player_->GetAnimationById(animation_id)
2948 animations->GetAnimationById(animation_id)
2949 ->set_time_offset(base::TimeDelta::FromMilliseconds(-10000)); 2874 ->set_time_offset(base::TimeDelta::FromMilliseconds(-10000));
2950 animations->GetAnimationById(animation_id) 2875 player_->GetAnimationById(animation_id)
2951 ->set_fill_mode(Animation::FillMode::NONE); 2876 ->set_fill_mode(Animation::FillMode::NONE);
2952 2877
2953 PushProperties(); 2878 PushProperties();
2954 EXPECT_TRUE(client_impl_.GetHasPotentialTransformAnimation( 2879 EXPECT_TRUE(client_impl_.GetHasPotentialTransformAnimation(
2955 element_id_, ElementListType::PENDING)); 2880 element_id_, ElementListType::PENDING));
2956 EXPECT_FALSE(client_impl_.GetTransformIsCurrentlyAnimating( 2881 EXPECT_FALSE(client_impl_.GetTransformIsCurrentlyAnimating(
2957 element_id_, ElementListType::PENDING)); 2882 element_id_, ElementListType::PENDING));
2958 EXPECT_FALSE(client_impl_.GetHasPotentialTransformAnimation( 2883 EXPECT_FALSE(client_impl_.GetHasPotentialTransformAnimation(
2959 element_id_, ElementListType::ACTIVE)); 2884 element_id_, ElementListType::ACTIVE));
2960 EXPECT_FALSE(client_impl_.GetTransformIsCurrentlyAnimating( 2885 EXPECT_FALSE(client_impl_.GetTransformIsCurrentlyAnimating(
2961 element_id_, ElementListType::ACTIVE)); 2886 element_id_, ElementListType::ACTIVE));
2962 2887
2963 animations_impl->ActivateAnimations(); 2888 element_animations_impl_->ActivateAnimations();
2964 EXPECT_TRUE(client_impl_.GetHasPotentialTransformAnimation( 2889 EXPECT_TRUE(client_impl_.GetHasPotentialTransformAnimation(
2965 element_id_, ElementListType::ACTIVE)); 2890 element_id_, ElementListType::ACTIVE));
2966 EXPECT_FALSE(client_impl_.GetTransformIsCurrentlyAnimating( 2891 EXPECT_FALSE(client_impl_.GetTransformIsCurrentlyAnimating(
2967 element_id_, ElementListType::ACTIVE)); 2892 element_id_, ElementListType::ACTIVE));
2968 } 2893 }
2969 2894
2970 TEST_F(ElementAnimationsTest, ObserverNotifiedWhenOpacityAnimationChanges) { 2895 TEST_F(ElementAnimationsTest, ObserverNotifiedWhenOpacityAnimationChanges) {
2971 CreateTestLayer(true, true); 2896 CreateTestLayer(true, true);
2972 AttachTimelinePlayerLayer(); 2897 AttachTimelinePlayerLayer();
2973 CreateImplTimelineAndPlayer(); 2898 CreateImplTimelineAndPlayer();
2974 2899
2975 scoped_refptr<ElementAnimations> animations = element_animations();
2976 scoped_refptr<ElementAnimations> animations_impl = element_animations_impl();
2977
2978 auto events = host_impl_->CreateEvents(); 2900 auto events = host_impl_->CreateEvents();
2979 2901
2980 EXPECT_FALSE(client_.GetHasPotentialOpacityAnimation( 2902 EXPECT_FALSE(client_.GetHasPotentialOpacityAnimation(
2981 element_id_, ElementListType::ACTIVE)); 2903 element_id_, ElementListType::ACTIVE));
2982 EXPECT_FALSE(client_.GetOpacityIsCurrentlyAnimating(element_id_, 2904 EXPECT_FALSE(client_.GetOpacityIsCurrentlyAnimating(element_id_,
2983 ElementListType::ACTIVE)); 2905 ElementListType::ACTIVE));
2984 EXPECT_FALSE(client_impl_.GetHasPotentialOpacityAnimation( 2906 EXPECT_FALSE(client_impl_.GetHasPotentialOpacityAnimation(
2985 element_id_, ElementListType::PENDING)); 2907 element_id_, ElementListType::PENDING));
2986 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating( 2908 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating(
2987 element_id_, ElementListType::PENDING)); 2909 element_id_, ElementListType::PENDING));
2988 EXPECT_FALSE(client_impl_.GetHasPotentialOpacityAnimation( 2910 EXPECT_FALSE(client_impl_.GetHasPotentialOpacityAnimation(
2989 element_id_, ElementListType::ACTIVE)); 2911 element_id_, ElementListType::ACTIVE));
2990 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating( 2912 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating(
2991 element_id_, ElementListType::ACTIVE)); 2913 element_id_, ElementListType::ACTIVE));
2992 2914
2993 // Case 1: An animation that's allowed to run until its finish point. 2915 // Case 1: An animation that's allowed to run until its finish point.
2994 AddOpacityTransitionToElementAnimations(animations.get(), 1.0, 0.f, 1.f, 2916 AddOpacityTransitionToPlayer(player_.get(), 1.0, 0.f, 1.f,
2995 false /*use_timing_function*/); 2917 false /*use_timing_function*/);
2996 EXPECT_TRUE(client_.GetHasPotentialOpacityAnimation(element_id_, 2918 EXPECT_TRUE(client_.GetHasPotentialOpacityAnimation(element_id_,
2997 ElementListType::ACTIVE)); 2919 ElementListType::ACTIVE));
2998 EXPECT_TRUE(client_.GetOpacityIsCurrentlyAnimating(element_id_, 2920 EXPECT_TRUE(client_.GetOpacityIsCurrentlyAnimating(element_id_,
2999 ElementListType::ACTIVE)); 2921 ElementListType::ACTIVE));
3000 2922
3001 PushProperties(); 2923 PushProperties();
3002 EXPECT_TRUE(client_impl_.GetHasPotentialOpacityAnimation( 2924 EXPECT_TRUE(client_impl_.GetHasPotentialOpacityAnimation(
3003 element_id_, ElementListType::PENDING)); 2925 element_id_, ElementListType::PENDING));
3004 EXPECT_TRUE(client_impl_.GetOpacityIsCurrentlyAnimating( 2926 EXPECT_TRUE(client_impl_.GetOpacityIsCurrentlyAnimating(
3005 element_id_, ElementListType::PENDING)); 2927 element_id_, ElementListType::PENDING));
3006 EXPECT_FALSE(client_impl_.GetHasPotentialOpacityAnimation( 2928 EXPECT_FALSE(client_impl_.GetHasPotentialOpacityAnimation(
3007 element_id_, ElementListType::ACTIVE)); 2929 element_id_, ElementListType::ACTIVE));
3008 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating( 2930 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating(
3009 element_id_, ElementListType::ACTIVE)); 2931 element_id_, ElementListType::ACTIVE));
3010 2932
3011 animations_impl->ActivateAnimations(); 2933 element_animations_impl_->ActivateAnimations();
3012 EXPECT_TRUE(client_impl_.GetHasPotentialOpacityAnimation( 2934 EXPECT_TRUE(client_impl_.GetHasPotentialOpacityAnimation(
3013 element_id_, ElementListType::PENDING)); 2935 element_id_, ElementListType::PENDING));
3014 EXPECT_TRUE(client_impl_.GetOpacityIsCurrentlyAnimating( 2936 EXPECT_TRUE(client_impl_.GetOpacityIsCurrentlyAnimating(
3015 element_id_, ElementListType::PENDING)); 2937 element_id_, ElementListType::PENDING));
3016 EXPECT_TRUE(client_impl_.GetHasPotentialOpacityAnimation( 2938 EXPECT_TRUE(client_impl_.GetHasPotentialOpacityAnimation(
3017 element_id_, ElementListType::ACTIVE)); 2939 element_id_, ElementListType::ACTIVE));
3018 EXPECT_TRUE(client_impl_.GetOpacityIsCurrentlyAnimating( 2940 EXPECT_TRUE(client_impl_.GetOpacityIsCurrentlyAnimating(
3019 element_id_, ElementListType::ACTIVE)); 2941 element_id_, ElementListType::ACTIVE));
3020 2942
3021 animations_impl->Animate(kInitialTickTime); 2943 element_animations_impl_->Animate(kInitialTickTime);
3022 animations_impl->UpdateState(true, events.get()); 2944 element_animations_impl_->UpdateState(true, events.get());
3023 2945
3024 animations->NotifyAnimationStarted(events->events_[0]); 2946 player_->NotifyAnimationStarted(events->events_[0]);
3025 events->events_.clear(); 2947 events->events_.clear();
3026 2948
3027 // Finish the animation. 2949 // Finish the animation.
3028 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1000)); 2950 element_animations_->Animate(kInitialTickTime +
3029 animations->UpdateState(true, nullptr); 2951 TimeDelta::FromMilliseconds(1000));
2952 element_animations_->UpdateState(true, nullptr);
3030 EXPECT_FALSE(client_.GetHasPotentialOpacityAnimation( 2953 EXPECT_FALSE(client_.GetHasPotentialOpacityAnimation(
3031 element_id_, ElementListType::ACTIVE)); 2954 element_id_, ElementListType::ACTIVE));
3032 EXPECT_FALSE(client_.GetOpacityIsCurrentlyAnimating(element_id_, 2955 EXPECT_FALSE(client_.GetOpacityIsCurrentlyAnimating(element_id_,
3033 ElementListType::ACTIVE)); 2956 ElementListType::ACTIVE));
3034 2957
3035 PushProperties(); 2958 PushProperties();
3036 2959
3037 // animations_impl hasn't yet ticked at/past the end of the animation. 2960 // animations_impl hasn't yet ticked at/past the end of the animation.
3038 EXPECT_TRUE(client_impl_.GetHasPotentialOpacityAnimation( 2961 EXPECT_TRUE(client_impl_.GetHasPotentialOpacityAnimation(
3039 element_id_, ElementListType::PENDING)); 2962 element_id_, ElementListType::PENDING));
3040 EXPECT_TRUE(client_impl_.GetOpacityIsCurrentlyAnimating( 2963 EXPECT_TRUE(client_impl_.GetOpacityIsCurrentlyAnimating(
3041 element_id_, ElementListType::PENDING)); 2964 element_id_, ElementListType::PENDING));
3042 EXPECT_TRUE(client_impl_.GetHasPotentialOpacityAnimation( 2965 EXPECT_TRUE(client_impl_.GetHasPotentialOpacityAnimation(
3043 element_id_, ElementListType::ACTIVE)); 2966 element_id_, ElementListType::ACTIVE));
3044 EXPECT_TRUE(client_impl_.GetOpacityIsCurrentlyAnimating( 2967 EXPECT_TRUE(client_impl_.GetOpacityIsCurrentlyAnimating(
3045 element_id_, ElementListType::ACTIVE)); 2968 element_id_, ElementListType::ACTIVE));
3046 2969
3047 animations_impl->Animate(kInitialTickTime + 2970 element_animations_impl_->Animate(kInitialTickTime +
3048 TimeDelta::FromMilliseconds(1000)); 2971 TimeDelta::FromMilliseconds(1000));
3049 animations_impl->UpdateState(true, events.get()); 2972 element_animations_impl_->UpdateState(true, events.get());
3050 EXPECT_FALSE(client_impl_.GetHasPotentialOpacityAnimation( 2973 EXPECT_FALSE(client_impl_.GetHasPotentialOpacityAnimation(
3051 element_id_, ElementListType::PENDING)); 2974 element_id_, ElementListType::PENDING));
3052 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating( 2975 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating(
3053 element_id_, ElementListType::PENDING)); 2976 element_id_, ElementListType::PENDING));
3054 EXPECT_FALSE(client_impl_.GetHasPotentialOpacityAnimation( 2977 EXPECT_FALSE(client_impl_.GetHasPotentialOpacityAnimation(
3055 element_id_, ElementListType::ACTIVE)); 2978 element_id_, ElementListType::ACTIVE));
3056 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating( 2979 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating(
3057 element_id_, ElementListType::ACTIVE)); 2980 element_id_, ElementListType::ACTIVE));
3058 2981
3059 // Case 2: An animation that's removed before it finishes. 2982 // Case 2: An animation that's removed before it finishes.
3060 int animation_id = AddOpacityTransitionToElementAnimations( 2983 int animation_id = AddOpacityTransitionToPlayer(
3061 animations.get(), 10.0, 0.f, 1.f, false /*use_timing_function*/); 2984 player_.get(), 10.0, 0.f, 1.f, false /*use_timing_function*/);
3062 EXPECT_TRUE(client_.GetHasPotentialOpacityAnimation(element_id_, 2985 EXPECT_TRUE(client_.GetHasPotentialOpacityAnimation(element_id_,
3063 ElementListType::ACTIVE)); 2986 ElementListType::ACTIVE));
3064 EXPECT_TRUE(client_.GetOpacityIsCurrentlyAnimating(element_id_, 2987 EXPECT_TRUE(client_.GetOpacityIsCurrentlyAnimating(element_id_,
3065 ElementListType::ACTIVE)); 2988 ElementListType::ACTIVE));
3066 2989
3067 PushProperties(); 2990 PushProperties();
3068 EXPECT_TRUE(client_impl_.GetHasPotentialOpacityAnimation( 2991 EXPECT_TRUE(client_impl_.GetHasPotentialOpacityAnimation(
3069 element_id_, ElementListType::PENDING)); 2992 element_id_, ElementListType::PENDING));
3070 EXPECT_TRUE(client_impl_.GetOpacityIsCurrentlyAnimating( 2993 EXPECT_TRUE(client_impl_.GetOpacityIsCurrentlyAnimating(
3071 element_id_, ElementListType::PENDING)); 2994 element_id_, ElementListType::PENDING));
3072 EXPECT_FALSE(client_impl_.GetHasPotentialOpacityAnimation( 2995 EXPECT_FALSE(client_impl_.GetHasPotentialOpacityAnimation(
3073 element_id_, ElementListType::ACTIVE)); 2996 element_id_, ElementListType::ACTIVE));
3074 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating( 2997 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating(
3075 element_id_, ElementListType::ACTIVE)); 2998 element_id_, ElementListType::ACTIVE));
3076 2999
3077 animations_impl->ActivateAnimations(); 3000 element_animations_impl_->ActivateAnimations();
3078 EXPECT_TRUE(client_impl_.GetHasPotentialOpacityAnimation( 3001 EXPECT_TRUE(client_impl_.GetHasPotentialOpacityAnimation(
3079 element_id_, ElementListType::ACTIVE)); 3002 element_id_, ElementListType::ACTIVE));
3080 EXPECT_TRUE(client_impl_.GetOpacityIsCurrentlyAnimating( 3003 EXPECT_TRUE(client_impl_.GetOpacityIsCurrentlyAnimating(
3081 element_id_, ElementListType::ACTIVE)); 3004 element_id_, ElementListType::ACTIVE));
3082 3005
3083 animations_impl->Animate(kInitialTickTime + 3006 element_animations_impl_->Animate(kInitialTickTime +
3084 TimeDelta::FromMilliseconds(2000)); 3007 TimeDelta::FromMilliseconds(2000));
3085 animations_impl->UpdateState(true, events.get()); 3008 element_animations_impl_->UpdateState(true, events.get());
3086 3009
3087 animations->NotifyAnimationStarted(events->events_[0]); 3010 player_->NotifyAnimationStarted(events->events_[0]);
3088 events->events_.clear(); 3011 events->events_.clear();
3089 3012
3090 animations->RemoveAnimation(animation_id); 3013 player_->RemoveAnimation(animation_id);
3091 EXPECT_FALSE(client_.GetHasPotentialOpacityAnimation( 3014 EXPECT_FALSE(client_.GetHasPotentialOpacityAnimation(
3092 element_id_, ElementListType::ACTIVE)); 3015 element_id_, ElementListType::ACTIVE));
3093 EXPECT_FALSE(client_.GetOpacityIsCurrentlyAnimating(element_id_, 3016 EXPECT_FALSE(client_.GetOpacityIsCurrentlyAnimating(element_id_,
3094 ElementListType::ACTIVE)); 3017 ElementListType::ACTIVE));
3095 3018
3096 PushProperties(); 3019 PushProperties();
3097 EXPECT_FALSE(client_impl_.GetHasPotentialOpacityAnimation( 3020 EXPECT_FALSE(client_impl_.GetHasPotentialOpacityAnimation(
3098 element_id_, ElementListType::PENDING)); 3021 element_id_, ElementListType::PENDING));
3099 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating( 3022 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating(
3100 element_id_, ElementListType::PENDING)); 3023 element_id_, ElementListType::PENDING));
3101 EXPECT_TRUE(client_impl_.GetHasPotentialOpacityAnimation( 3024 EXPECT_TRUE(client_impl_.GetHasPotentialOpacityAnimation(
3102 element_id_, ElementListType::ACTIVE)); 3025 element_id_, ElementListType::ACTIVE));
3103 EXPECT_TRUE(client_impl_.GetOpacityIsCurrentlyAnimating( 3026 EXPECT_TRUE(client_impl_.GetOpacityIsCurrentlyAnimating(
3104 element_id_, ElementListType::ACTIVE)); 3027 element_id_, ElementListType::ACTIVE));
3105 3028
3106 animations_impl->ActivateAnimations(); 3029 element_animations_impl_->ActivateAnimations();
3107 EXPECT_FALSE(client_impl_.GetHasPotentialOpacityAnimation( 3030 EXPECT_FALSE(client_impl_.GetHasPotentialOpacityAnimation(
3108 element_id_, ElementListType::ACTIVE)); 3031 element_id_, ElementListType::ACTIVE));
3109 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating( 3032 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating(
3110 element_id_, ElementListType::ACTIVE)); 3033 element_id_, ElementListType::ACTIVE));
3111 3034
3112 // Case 3: An animation that's aborted before it finishes. 3035 // Case 3: An animation that's aborted before it finishes.
3113 animation_id = AddOpacityTransitionToElementAnimations( 3036 animation_id = AddOpacityTransitionToPlayer(player_.get(), 10.0, 0.f, 0.5f,
3114 animations.get(), 10.0, 0.f, 0.5f, false /*use_timing_function*/); 3037 false /*use_timing_function*/);
3115 EXPECT_TRUE(client_.GetHasPotentialOpacityAnimation(element_id_, 3038 EXPECT_TRUE(client_.GetHasPotentialOpacityAnimation(element_id_,
3116 ElementListType::ACTIVE)); 3039 ElementListType::ACTIVE));
3117 EXPECT_TRUE(client_.GetOpacityIsCurrentlyAnimating(element_id_, 3040 EXPECT_TRUE(client_.GetOpacityIsCurrentlyAnimating(element_id_,
3118 ElementListType::ACTIVE)); 3041 ElementListType::ACTIVE));
3119 3042
3120 PushProperties(); 3043 PushProperties();
3121 EXPECT_TRUE(client_impl_.GetHasPotentialOpacityAnimation( 3044 EXPECT_TRUE(client_impl_.GetHasPotentialOpacityAnimation(
3122 element_id_, ElementListType::PENDING)); 3045 element_id_, ElementListType::PENDING));
3123 EXPECT_TRUE(client_impl_.GetOpacityIsCurrentlyAnimating( 3046 EXPECT_TRUE(client_impl_.GetOpacityIsCurrentlyAnimating(
3124 element_id_, ElementListType::PENDING)); 3047 element_id_, ElementListType::PENDING));
3125 EXPECT_FALSE(client_impl_.GetHasPotentialOpacityAnimation( 3048 EXPECT_FALSE(client_impl_.GetHasPotentialOpacityAnimation(
3126 element_id_, ElementListType::ACTIVE)); 3049 element_id_, ElementListType::ACTIVE));
3127 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating( 3050 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating(
3128 element_id_, ElementListType::ACTIVE)); 3051 element_id_, ElementListType::ACTIVE));
3129 3052
3130 animations_impl->ActivateAnimations(); 3053 element_animations_impl_->ActivateAnimations();
3131 EXPECT_TRUE(client_impl_.GetHasPotentialOpacityAnimation( 3054 EXPECT_TRUE(client_impl_.GetHasPotentialOpacityAnimation(
3132 element_id_, ElementListType::ACTIVE)); 3055 element_id_, ElementListType::ACTIVE));
3133 EXPECT_TRUE(client_impl_.GetOpacityIsCurrentlyAnimating( 3056 EXPECT_TRUE(client_impl_.GetOpacityIsCurrentlyAnimating(
3134 element_id_, ElementListType::ACTIVE)); 3057 element_id_, ElementListType::ACTIVE));
3135 3058
3136 animations_impl->Animate(kInitialTickTime + 3059 element_animations_impl_->Animate(kInitialTickTime +
3137 TimeDelta::FromMilliseconds(2000)); 3060 TimeDelta::FromMilliseconds(2000));
3138 animations_impl->UpdateState(true, events.get()); 3061 element_animations_impl_->UpdateState(true, events.get());
3139 3062
3140 animations->NotifyAnimationStarted(events->events_[0]); 3063 player_->NotifyAnimationStarted(events->events_[0]);
3141 events->events_.clear(); 3064 events->events_.clear();
3142 3065
3143 animations_impl->AbortAnimations(TargetProperty::OPACITY); 3066 player_impl_->AbortAnimations(TargetProperty::OPACITY, false);
3144 EXPECT_FALSE(client_impl_.GetHasPotentialOpacityAnimation( 3067 EXPECT_FALSE(client_impl_.GetHasPotentialOpacityAnimation(
3145 element_id_, ElementListType::PENDING)); 3068 element_id_, ElementListType::PENDING));
3146 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating( 3069 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating(
3147 element_id_, ElementListType::PENDING)); 3070 element_id_, ElementListType::PENDING));
3148 EXPECT_FALSE(client_impl_.GetHasPotentialOpacityAnimation( 3071 EXPECT_FALSE(client_impl_.GetHasPotentialOpacityAnimation(
3149 element_id_, ElementListType::ACTIVE)); 3072 element_id_, ElementListType::ACTIVE));
3150 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating( 3073 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating(
3151 element_id_, ElementListType::ACTIVE)); 3074 element_id_, ElementListType::ACTIVE));
3152 3075
3153 animations_impl->Animate(kInitialTickTime + 3076 element_animations_impl_->Animate(kInitialTickTime +
3154 TimeDelta::FromMilliseconds(4000)); 3077 TimeDelta::FromMilliseconds(4000));
3155 animations_impl->UpdateState(true, events.get()); 3078 element_animations_impl_->UpdateState(true, events.get());
3156 3079
3157 animations->NotifyAnimationAborted(events->events_[0]); 3080 element_animations_->NotifyAnimationAborted(events->events_[0]);
3158 EXPECT_FALSE(client_.GetHasPotentialOpacityAnimation( 3081 EXPECT_FALSE(client_.GetHasPotentialOpacityAnimation(
3159 element_id_, ElementListType::ACTIVE)); 3082 element_id_, ElementListType::ACTIVE));
3160 EXPECT_FALSE(client_.GetOpacityIsCurrentlyAnimating(element_id_, 3083 EXPECT_FALSE(client_.GetOpacityIsCurrentlyAnimating(element_id_,
3161 ElementListType::ACTIVE)); 3084 ElementListType::ACTIVE));
3162 3085
3163 // Case 4 : An animation that's not in effect. 3086 // Case 4 : An animation that's not in effect.
3164 animation_id = AddOpacityTransitionToElementAnimations( 3087 animation_id = AddOpacityTransitionToPlayer(player_.get(), 1.0, 0.f, 0.5f,
3165 animations.get(), 1.0, 0.f, 0.5f, false /*use_timing_function*/); 3088 false /*use_timing_function*/);
3166 animations->GetAnimationById(animation_id) 3089 player_->GetAnimationById(animation_id)
3167 ->set_time_offset(base::TimeDelta::FromMilliseconds(-10000)); 3090 ->set_time_offset(base::TimeDelta::FromMilliseconds(-10000));
3168 animations->GetAnimationById(animation_id) 3091 player_->GetAnimationById(animation_id)
3169 ->set_fill_mode(Animation::FillMode::NONE); 3092 ->set_fill_mode(Animation::FillMode::NONE);
3170 3093
3171 PushProperties(); 3094 PushProperties();
3172 EXPECT_TRUE(client_impl_.GetHasPotentialOpacityAnimation( 3095 EXPECT_TRUE(client_impl_.GetHasPotentialOpacityAnimation(
3173 element_id_, ElementListType::PENDING)); 3096 element_id_, ElementListType::PENDING));
3174 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating( 3097 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating(
3175 element_id_, ElementListType::PENDING)); 3098 element_id_, ElementListType::PENDING));
3176 EXPECT_FALSE(client_impl_.GetHasPotentialOpacityAnimation( 3099 EXPECT_FALSE(client_impl_.GetHasPotentialOpacityAnimation(
3177 element_id_, ElementListType::ACTIVE)); 3100 element_id_, ElementListType::ACTIVE));
3178 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating( 3101 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating(
3179 element_id_, ElementListType::ACTIVE)); 3102 element_id_, ElementListType::ACTIVE));
3180 3103
3181 animations_impl->ActivateAnimations(); 3104 element_animations_impl_->ActivateAnimations();
3182 EXPECT_TRUE(client_impl_.GetHasPotentialOpacityAnimation( 3105 EXPECT_TRUE(client_impl_.GetHasPotentialOpacityAnimation(
3183 element_id_, ElementListType::ACTIVE)); 3106 element_id_, ElementListType::ACTIVE));
3184 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating( 3107 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating(
3185 element_id_, ElementListType::ACTIVE)); 3108 element_id_, ElementListType::ACTIVE));
3186 } 3109 }
3187 3110
3188 TEST_F(ElementAnimationsTest, ObserverNotifiedWhenFilterAnimationChanges) { 3111 TEST_F(ElementAnimationsTest, ObserverNotifiedWhenFilterAnimationChanges) {
3189 CreateTestLayer(true, true); 3112 CreateTestLayer(true, true);
3190 AttachTimelinePlayerLayer(); 3113 AttachTimelinePlayerLayer();
3191 CreateImplTimelineAndPlayer(); 3114 CreateImplTimelineAndPlayer();
3192 3115
3193 scoped_refptr<ElementAnimations> animations = element_animations();
3194 scoped_refptr<ElementAnimations> animations_impl = element_animations_impl();
3195
3196 auto events = host_impl_->CreateEvents(); 3116 auto events = host_impl_->CreateEvents();
3197 3117
3198 EXPECT_FALSE(client_.GetHasPotentialFilterAnimation(element_id_, 3118 EXPECT_FALSE(client_.GetHasPotentialFilterAnimation(element_id_,
3199 ElementListType::ACTIVE)); 3119 ElementListType::ACTIVE));
3200 EXPECT_FALSE(client_.GetFilterIsCurrentlyAnimating(element_id_, 3120 EXPECT_FALSE(client_.GetFilterIsCurrentlyAnimating(element_id_,
3201 ElementListType::ACTIVE)); 3121 ElementListType::ACTIVE));
3202 EXPECT_FALSE(client_impl_.GetHasPotentialFilterAnimation( 3122 EXPECT_FALSE(client_impl_.GetHasPotentialFilterAnimation(
3203 element_id_, ElementListType::PENDING)); 3123 element_id_, ElementListType::PENDING));
3204 EXPECT_FALSE(client_impl_.GetFilterIsCurrentlyAnimating( 3124 EXPECT_FALSE(client_impl_.GetFilterIsCurrentlyAnimating(
3205 element_id_, ElementListType::PENDING)); 3125 element_id_, ElementListType::PENDING));
3206 EXPECT_FALSE(client_impl_.GetHasPotentialFilterAnimation( 3126 EXPECT_FALSE(client_impl_.GetHasPotentialFilterAnimation(
3207 element_id_, ElementListType::ACTIVE)); 3127 element_id_, ElementListType::ACTIVE));
3208 EXPECT_FALSE(client_impl_.GetFilterIsCurrentlyAnimating( 3128 EXPECT_FALSE(client_impl_.GetFilterIsCurrentlyAnimating(
3209 element_id_, ElementListType::ACTIVE)); 3129 element_id_, ElementListType::ACTIVE));
3210 3130
3211 // Case 1: An animation that's allowed to run until its finish point. 3131 // Case 1: An animation that's allowed to run until its finish point.
3212 AddAnimatedFilterToElementAnimations(animations.get(), 1.0, 0.f, 1.f); 3132 AddAnimatedFilterToPlayer(player_.get(), 1.0, 0.f, 1.f);
3213 EXPECT_TRUE(client_.GetHasPotentialFilterAnimation(element_id_, 3133 EXPECT_TRUE(client_.GetHasPotentialFilterAnimation(element_id_,
3214 ElementListType::ACTIVE)); 3134 ElementListType::ACTIVE));
3215 EXPECT_TRUE(client_.GetFilterIsCurrentlyAnimating(element_id_, 3135 EXPECT_TRUE(client_.GetFilterIsCurrentlyAnimating(element_id_,
3216 ElementListType::ACTIVE)); 3136 ElementListType::ACTIVE));
3217 3137
3218 PushProperties(); 3138 PushProperties();
3219 EXPECT_TRUE(client_impl_.GetHasPotentialFilterAnimation( 3139 EXPECT_TRUE(client_impl_.GetHasPotentialFilterAnimation(
3220 element_id_, ElementListType::PENDING)); 3140 element_id_, ElementListType::PENDING));
3221 EXPECT_TRUE(client_impl_.GetFilterIsCurrentlyAnimating( 3141 EXPECT_TRUE(client_impl_.GetFilterIsCurrentlyAnimating(
3222 element_id_, ElementListType::PENDING)); 3142 element_id_, ElementListType::PENDING));
3223 EXPECT_FALSE(client_impl_.GetHasPotentialFilterAnimation( 3143 EXPECT_FALSE(client_impl_.GetHasPotentialFilterAnimation(
3224 element_id_, ElementListType::ACTIVE)); 3144 element_id_, ElementListType::ACTIVE));
3225 EXPECT_FALSE(client_impl_.GetFilterIsCurrentlyAnimating( 3145 EXPECT_FALSE(client_impl_.GetFilterIsCurrentlyAnimating(
3226 element_id_, ElementListType::ACTIVE)); 3146 element_id_, ElementListType::ACTIVE));
3227 3147
3228 animations_impl->ActivateAnimations(); 3148 element_animations_impl_->ActivateAnimations();
3229 EXPECT_TRUE(client_impl_.GetHasPotentialFilterAnimation( 3149 EXPECT_TRUE(client_impl_.GetHasPotentialFilterAnimation(
3230 element_id_, ElementListType::PENDING)); 3150 element_id_, ElementListType::PENDING));
3231 EXPECT_TRUE(client_impl_.GetFilterIsCurrentlyAnimating( 3151 EXPECT_TRUE(client_impl_.GetFilterIsCurrentlyAnimating(
3232 element_id_, ElementListType::PENDING)); 3152 element_id_, ElementListType::PENDING));
3233 EXPECT_TRUE(client_impl_.GetHasPotentialFilterAnimation( 3153 EXPECT_TRUE(client_impl_.GetHasPotentialFilterAnimation(
3234 element_id_, ElementListType::ACTIVE)); 3154 element_id_, ElementListType::ACTIVE));
3235 EXPECT_TRUE(client_impl_.GetFilterIsCurrentlyAnimating( 3155 EXPECT_TRUE(client_impl_.GetFilterIsCurrentlyAnimating(
3236 element_id_, ElementListType::ACTIVE)); 3156 element_id_, ElementListType::ACTIVE));
3237 3157
3238 animations_impl->Animate(kInitialTickTime); 3158 element_animations_impl_->Animate(kInitialTickTime);
3239 animations_impl->UpdateState(true, events.get()); 3159 element_animations_impl_->UpdateState(true, events.get());
3240 3160
3241 animations->NotifyAnimationStarted(events->events_[0]); 3161 player_->NotifyAnimationStarted(events->events_[0]);
3242 events->events_.clear(); 3162 events->events_.clear();
3243 3163
3244 // Finish the animation. 3164 // Finish the animation.
3245 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1000)); 3165 element_animations_->Animate(kInitialTickTime +
3246 animations->UpdateState(true, nullptr); 3166 TimeDelta::FromMilliseconds(1000));
3167 element_animations_->UpdateState(true, nullptr);
3247 EXPECT_FALSE(client_.GetHasPotentialFilterAnimation(element_id_, 3168 EXPECT_FALSE(client_.GetHasPotentialFilterAnimation(element_id_,
3248 ElementListType::ACTIVE)); 3169 ElementListType::ACTIVE));
3249 EXPECT_FALSE(client_.GetFilterIsCurrentlyAnimating(element_id_, 3170 EXPECT_FALSE(client_.GetFilterIsCurrentlyAnimating(element_id_,
3250 ElementListType::ACTIVE)); 3171 ElementListType::ACTIVE));
3251 3172
3252 PushProperties(); 3173 PushProperties();
3253 3174
3254 // animations_impl hasn't yet ticked at/past the end of the animation. 3175 // animations_impl hasn't yet ticked at/past the end of the animation.
3255 EXPECT_TRUE(client_impl_.GetHasPotentialFilterAnimation( 3176 EXPECT_TRUE(client_impl_.GetHasPotentialFilterAnimation(
3256 element_id_, ElementListType::PENDING)); 3177 element_id_, ElementListType::PENDING));
3257 EXPECT_TRUE(client_impl_.GetFilterIsCurrentlyAnimating( 3178 EXPECT_TRUE(client_impl_.GetFilterIsCurrentlyAnimating(
3258 element_id_, ElementListType::PENDING)); 3179 element_id_, ElementListType::PENDING));
3259 EXPECT_TRUE(client_impl_.GetHasPotentialFilterAnimation( 3180 EXPECT_TRUE(client_impl_.GetHasPotentialFilterAnimation(
3260 element_id_, ElementListType::ACTIVE)); 3181 element_id_, ElementListType::ACTIVE));
3261 EXPECT_TRUE(client_impl_.GetFilterIsCurrentlyAnimating( 3182 EXPECT_TRUE(client_impl_.GetFilterIsCurrentlyAnimating(
3262 element_id_, ElementListType::ACTIVE)); 3183 element_id_, ElementListType::ACTIVE));
3263 3184
3264 animations_impl->Animate(kInitialTickTime + 3185 element_animations_impl_->Animate(kInitialTickTime +
3265 TimeDelta::FromMilliseconds(1000)); 3186 TimeDelta::FromMilliseconds(1000));
3266 animations_impl->UpdateState(true, events.get()); 3187 element_animations_impl_->UpdateState(true, events.get());
3267 EXPECT_FALSE(client_impl_.GetHasPotentialFilterAnimation( 3188 EXPECT_FALSE(client_impl_.GetHasPotentialFilterAnimation(
3268 element_id_, ElementListType::PENDING)); 3189 element_id_, ElementListType::PENDING));
3269 EXPECT_FALSE(client_impl_.GetFilterIsCurrentlyAnimating( 3190 EXPECT_FALSE(client_impl_.GetFilterIsCurrentlyAnimating(
3270 element_id_, ElementListType::PENDING)); 3191 element_id_, ElementListType::PENDING));
3271 EXPECT_FALSE(client_impl_.GetHasPotentialFilterAnimation( 3192 EXPECT_FALSE(client_impl_.GetHasPotentialFilterAnimation(
3272 element_id_, ElementListType::ACTIVE)); 3193 element_id_, ElementListType::ACTIVE));
3273 EXPECT_FALSE(client_impl_.GetFilterIsCurrentlyAnimating( 3194 EXPECT_FALSE(client_impl_.GetFilterIsCurrentlyAnimating(
3274 element_id_, ElementListType::ACTIVE)); 3195 element_id_, ElementListType::ACTIVE));
3275 3196
3276 // Case 2: An animation that's removed before it finishes. 3197 // Case 2: An animation that's removed before it finishes.
3277 int animation_id = 3198 int animation_id = AddAnimatedFilterToPlayer(player_.get(), 10.0, 0.f, 1.f);
3278 AddAnimatedFilterToElementAnimations(animations.get(), 10.0, 0.f, 1.f);
3279 EXPECT_TRUE(client_.GetHasPotentialFilterAnimation(element_id_, 3199 EXPECT_TRUE(client_.GetHasPotentialFilterAnimation(element_id_,
3280 ElementListType::ACTIVE)); 3200 ElementListType::ACTIVE));
3281 EXPECT_TRUE(client_.GetFilterIsCurrentlyAnimating(element_id_, 3201 EXPECT_TRUE(client_.GetFilterIsCurrentlyAnimating(element_id_,
3282 ElementListType::ACTIVE)); 3202 ElementListType::ACTIVE));
3283 3203
3284 PushProperties(); 3204 PushProperties();
3285 EXPECT_TRUE(client_impl_.GetHasPotentialFilterAnimation( 3205 EXPECT_TRUE(client_impl_.GetHasPotentialFilterAnimation(
3286 element_id_, ElementListType::PENDING)); 3206 element_id_, ElementListType::PENDING));
3287 EXPECT_TRUE(client_impl_.GetFilterIsCurrentlyAnimating( 3207 EXPECT_TRUE(client_impl_.GetFilterIsCurrentlyAnimating(
3288 element_id_, ElementListType::PENDING)); 3208 element_id_, ElementListType::PENDING));
3289 EXPECT_FALSE(client_impl_.GetHasPotentialFilterAnimation( 3209 EXPECT_FALSE(client_impl_.GetHasPotentialFilterAnimation(
3290 element_id_, ElementListType::ACTIVE)); 3210 element_id_, ElementListType::ACTIVE));
3291 EXPECT_FALSE(client_impl_.GetFilterIsCurrentlyAnimating( 3211 EXPECT_FALSE(client_impl_.GetFilterIsCurrentlyAnimating(
3292 element_id_, ElementListType::ACTIVE)); 3212 element_id_, ElementListType::ACTIVE));
3293 3213
3294 animations_impl->ActivateAnimations(); 3214 element_animations_impl_->ActivateAnimations();
3295 EXPECT_TRUE(client_impl_.GetHasPotentialFilterAnimation( 3215 EXPECT_TRUE(client_impl_.GetHasPotentialFilterAnimation(
3296 element_id_, ElementListType::ACTIVE)); 3216 element_id_, ElementListType::ACTIVE));
3297 EXPECT_TRUE(client_impl_.GetFilterIsCurrentlyAnimating( 3217 EXPECT_TRUE(client_impl_.GetFilterIsCurrentlyAnimating(
3298 element_id_, ElementListType::ACTIVE)); 3218 element_id_, ElementListType::ACTIVE));
3299 3219
3300 animations_impl->Animate(kInitialTickTime + 3220 element_animations_impl_->Animate(kInitialTickTime +
3301 TimeDelta::FromMilliseconds(2000)); 3221 TimeDelta::FromMilliseconds(2000));
3302 animations_impl->UpdateState(true, events.get()); 3222 element_animations_impl_->UpdateState(true, events.get());
3303 3223
3304 animations->NotifyAnimationStarted(events->events_[0]); 3224 player_->NotifyAnimationStarted(events->events_[0]);
3305 events->events_.clear(); 3225 events->events_.clear();
3306 3226
3307 animations->RemoveAnimation(animation_id); 3227 player_->RemoveAnimation(animation_id);
3308 EXPECT_FALSE(client_.GetHasPotentialFilterAnimation(element_id_, 3228 EXPECT_FALSE(client_.GetHasPotentialFilterAnimation(element_id_,
3309 ElementListType::ACTIVE)); 3229 ElementListType::ACTIVE));
3310 EXPECT_FALSE(client_.GetFilterIsCurrentlyAnimating(element_id_, 3230 EXPECT_FALSE(client_.GetFilterIsCurrentlyAnimating(element_id_,
3311 ElementListType::ACTIVE)); 3231 ElementListType::ACTIVE));
3312 3232
3313 PushProperties(); 3233 PushProperties();
3314 EXPECT_FALSE(client_impl_.GetHasPotentialFilterAnimation( 3234 EXPECT_FALSE(client_impl_.GetHasPotentialFilterAnimation(
3315 element_id_, ElementListType::PENDING)); 3235 element_id_, ElementListType::PENDING));
3316 EXPECT_FALSE(client_impl_.GetFilterIsCurrentlyAnimating( 3236 EXPECT_FALSE(client_impl_.GetFilterIsCurrentlyAnimating(
3317 element_id_, ElementListType::PENDING)); 3237 element_id_, ElementListType::PENDING));
3318 EXPECT_TRUE(client_impl_.GetHasPotentialFilterAnimation( 3238 EXPECT_TRUE(client_impl_.GetHasPotentialFilterAnimation(
3319 element_id_, ElementListType::ACTIVE)); 3239 element_id_, ElementListType::ACTIVE));
3320 EXPECT_TRUE(client_impl_.GetFilterIsCurrentlyAnimating( 3240 EXPECT_TRUE(client_impl_.GetFilterIsCurrentlyAnimating(
3321 element_id_, ElementListType::ACTIVE)); 3241 element_id_, ElementListType::ACTIVE));
3322 3242
3323 animations_impl->ActivateAnimations(); 3243 element_animations_impl_->ActivateAnimations();
3324 EXPECT_FALSE(client_impl_.GetHasPotentialFilterAnimation( 3244 EXPECT_FALSE(client_impl_.GetHasPotentialFilterAnimation(
3325 element_id_, ElementListType::ACTIVE)); 3245 element_id_, ElementListType::ACTIVE));
3326 EXPECT_FALSE(client_impl_.GetFilterIsCurrentlyAnimating( 3246 EXPECT_FALSE(client_impl_.GetFilterIsCurrentlyAnimating(
3327 element_id_, ElementListType::ACTIVE)); 3247 element_id_, ElementListType::ACTIVE));
3328 3248
3329 // Case 3: An animation that's aborted before it finishes. 3249 // Case 3: An animation that's aborted before it finishes.
3330 animation_id = 3250 animation_id = AddAnimatedFilterToPlayer(player_.get(), 10.0, 0.f, 0.5f);
3331 AddAnimatedFilterToElementAnimations(animations.get(), 10.0, 0.f, 0.5f);
3332 EXPECT_TRUE(client_.GetHasPotentialFilterAnimation(element_id_, 3251 EXPECT_TRUE(client_.GetHasPotentialFilterAnimation(element_id_,
3333 ElementListType::ACTIVE)); 3252 ElementListType::ACTIVE));
3334 EXPECT_TRUE(client_.GetFilterIsCurrentlyAnimating(element_id_, 3253 EXPECT_TRUE(client_.GetFilterIsCurrentlyAnimating(element_id_,
3335 ElementListType::ACTIVE)); 3254 ElementListType::ACTIVE));
3336 3255
3337 PushProperties(); 3256 PushProperties();
3338 EXPECT_TRUE(client_impl_.GetHasPotentialFilterAnimation( 3257 EXPECT_TRUE(client_impl_.GetHasPotentialFilterAnimation(
3339 element_id_, ElementListType::PENDING)); 3258 element_id_, ElementListType::PENDING));
3340 EXPECT_TRUE(client_impl_.GetFilterIsCurrentlyAnimating( 3259 EXPECT_TRUE(client_impl_.GetFilterIsCurrentlyAnimating(
3341 element_id_, ElementListType::PENDING)); 3260 element_id_, ElementListType::PENDING));
3342 EXPECT_FALSE(client_impl_.GetHasPotentialFilterAnimation( 3261 EXPECT_FALSE(client_impl_.GetHasPotentialFilterAnimation(
3343 element_id_, ElementListType::ACTIVE)); 3262 element_id_, ElementListType::ACTIVE));
3344 EXPECT_FALSE(client_impl_.GetFilterIsCurrentlyAnimating( 3263 EXPECT_FALSE(client_impl_.GetFilterIsCurrentlyAnimating(
3345 element_id_, ElementListType::ACTIVE)); 3264 element_id_, ElementListType::ACTIVE));
3346 3265
3347 animations_impl->ActivateAnimations(); 3266 element_animations_impl_->ActivateAnimations();
3348 EXPECT_TRUE(client_impl_.GetHasPotentialFilterAnimation( 3267 EXPECT_TRUE(client_impl_.GetHasPotentialFilterAnimation(
3349 element_id_, ElementListType::ACTIVE)); 3268 element_id_, ElementListType::ACTIVE));
3350 EXPECT_TRUE(client_impl_.GetFilterIsCurrentlyAnimating( 3269 EXPECT_TRUE(client_impl_.GetFilterIsCurrentlyAnimating(
3351 element_id_, ElementListType::ACTIVE)); 3270 element_id_, ElementListType::ACTIVE));
3352 3271
3353 animations_impl->Animate(kInitialTickTime + 3272 element_animations_impl_->Animate(kInitialTickTime +
3354 TimeDelta::FromMilliseconds(2000)); 3273 TimeDelta::FromMilliseconds(2000));
3355 animations_impl->UpdateState(true, events.get()); 3274 element_animations_impl_->UpdateState(true, events.get());
3356 3275
3357 animations->NotifyAnimationStarted(events->events_[0]); 3276 player_->NotifyAnimationStarted(events->events_[0]);
3358 events->events_.clear(); 3277 events->events_.clear();
3359 3278
3360 animations_impl->AbortAnimations(TargetProperty::FILTER); 3279 player_impl_->AbortAnimations(TargetProperty::FILTER, false);
3361 EXPECT_FALSE(client_impl_.GetHasPotentialFilterAnimation( 3280 EXPECT_FALSE(client_impl_.GetHasPotentialFilterAnimation(
3362 element_id_, ElementListType::PENDING)); 3281 element_id_, ElementListType::PENDING));
3363 EXPECT_FALSE(client_impl_.GetFilterIsCurrentlyAnimating( 3282 EXPECT_FALSE(client_impl_.GetFilterIsCurrentlyAnimating(
3364 element_id_, ElementListType::PENDING)); 3283 element_id_, ElementListType::PENDING));
3365 EXPECT_FALSE(client_impl_.GetHasPotentialFilterAnimation( 3284 EXPECT_FALSE(client_impl_.GetHasPotentialFilterAnimation(
3366 element_id_, ElementListType::ACTIVE)); 3285 element_id_, ElementListType::ACTIVE));
3367 EXPECT_FALSE(client_impl_.GetFilterIsCurrentlyAnimating( 3286 EXPECT_FALSE(client_impl_.GetFilterIsCurrentlyAnimating(
3368 element_id_, ElementListType::ACTIVE)); 3287 element_id_, ElementListType::ACTIVE));
3369 3288
3370 animations_impl->Animate(kInitialTickTime + 3289 element_animations_impl_->Animate(kInitialTickTime +
3371 TimeDelta::FromMilliseconds(4000)); 3290 TimeDelta::FromMilliseconds(4000));
3372 animations_impl->UpdateState(true, events.get()); 3291 element_animations_impl_->UpdateState(true, events.get());
3373 3292
3374 animations->NotifyAnimationAborted(events->events_[0]); 3293 element_animations_->NotifyAnimationAborted(events->events_[0]);
3375 EXPECT_FALSE(client_.GetHasPotentialFilterAnimation(element_id_, 3294 EXPECT_FALSE(client_.GetHasPotentialFilterAnimation(element_id_,
3376 ElementListType::ACTIVE)); 3295 ElementListType::ACTIVE));
3377 EXPECT_FALSE(client_.GetFilterIsCurrentlyAnimating(element_id_, 3296 EXPECT_FALSE(client_.GetFilterIsCurrentlyAnimating(element_id_,
3378 ElementListType::ACTIVE)); 3297 ElementListType::ACTIVE));
3379 3298
3380 // Case 4 : An animation that's not in effect. 3299 // Case 4 : An animation that's not in effect.
3381 animation_id = 3300 animation_id = AddAnimatedFilterToPlayer(player_.get(), 1.0, 0.f, 0.5f);
3382 AddAnimatedFilterToElementAnimations(animations.get(), 1.0, 0.f, 0.5f); 3301 player_->GetAnimationById(animation_id)
3383 animations->GetAnimationById(animation_id)
3384 ->set_time_offset(base::TimeDelta::FromMilliseconds(-10000)); 3302 ->set_time_offset(base::TimeDelta::FromMilliseconds(-10000));
3385 animations->GetAnimationById(animation_id) 3303 player_->GetAnimationById(animation_id)
3386 ->set_fill_mode(Animation::FillMode::NONE); 3304 ->set_fill_mode(Animation::FillMode::NONE);
3387 3305
3388 PushProperties(); 3306 PushProperties();
3389 EXPECT_TRUE(client_impl_.GetHasPotentialFilterAnimation( 3307 EXPECT_TRUE(client_impl_.GetHasPotentialFilterAnimation(
3390 element_id_, ElementListType::PENDING)); 3308 element_id_, ElementListType::PENDING));
3391 EXPECT_FALSE(client_impl_.GetFilterIsCurrentlyAnimating( 3309 EXPECT_FALSE(client_impl_.GetFilterIsCurrentlyAnimating(
3392 element_id_, ElementListType::PENDING)); 3310 element_id_, ElementListType::PENDING));
3393 EXPECT_FALSE(client_impl_.GetHasPotentialFilterAnimation( 3311 EXPECT_FALSE(client_impl_.GetHasPotentialFilterAnimation(
3394 element_id_, ElementListType::ACTIVE)); 3312 element_id_, ElementListType::ACTIVE));
3395 EXPECT_FALSE(client_impl_.GetFilterIsCurrentlyAnimating( 3313 EXPECT_FALSE(client_impl_.GetFilterIsCurrentlyAnimating(
3396 element_id_, ElementListType::ACTIVE)); 3314 element_id_, ElementListType::ACTIVE));
3397 3315
3398 animations_impl->ActivateAnimations(); 3316 element_animations_impl_->ActivateAnimations();
3399 EXPECT_TRUE(client_impl_.GetHasPotentialFilterAnimation( 3317 EXPECT_TRUE(client_impl_.GetHasPotentialFilterAnimation(
3400 element_id_, ElementListType::ACTIVE)); 3318 element_id_, ElementListType::ACTIVE));
3401 EXPECT_FALSE(client_impl_.GetFilterIsCurrentlyAnimating( 3319 EXPECT_FALSE(client_impl_.GetFilterIsCurrentlyAnimating(
3402 element_id_, ElementListType::ACTIVE)); 3320 element_id_, ElementListType::ACTIVE));
3403 } 3321 }
3404 3322
3405 TEST_F(ElementAnimationsTest, ClippedOpacityValues) { 3323 TEST_F(ElementAnimationsTest, ClippedOpacityValues) {
3406 CreateTestLayer(false, false); 3324 CreateTestLayer(false, false);
3407 AttachTimelinePlayerLayer(); 3325 AttachTimelinePlayerLayer();
3408 3326
3409 scoped_refptr<ElementAnimations> animations = element_animations(); 3327 AddOpacityTransitionToPlayer(player_.get(), 1, 1.f, 2.f, true);
3410 3328
3411 AddOpacityTransitionToElementAnimations(animations.get(), 1, 1.f, 2.f, true); 3329 element_animations_->Animate(kInitialTickTime);
3412
3413 animations->Animate(kInitialTickTime);
3414 EXPECT_EQ(1.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 3330 EXPECT_EQ(1.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
3415 3331
3416 // Opacity values are clipped [0,1] 3332 // Opacity values are clipped [0,1]
3417 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1000)); 3333 element_animations_->Animate(kInitialTickTime +
3334 TimeDelta::FromMilliseconds(1000));
3418 EXPECT_EQ(1.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 3335 EXPECT_EQ(1.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
3419 } 3336 }
3420 3337
3421 TEST_F(ElementAnimationsTest, ClippedNegativeOpacityValues) { 3338 TEST_F(ElementAnimationsTest, ClippedNegativeOpacityValues) {
3422 CreateTestLayer(false, false); 3339 CreateTestLayer(false, false);
3423 AttachTimelinePlayerLayer(); 3340 AttachTimelinePlayerLayer();
3424 3341
3425 scoped_refptr<ElementAnimations> animations = element_animations(); 3342 AddOpacityTransitionToPlayer(player_.get(), 1, 0.f, -2.f, true);
3426 3343
3427 AddOpacityTransitionToElementAnimations(animations.get(), 1, 0.f, -2.f, true); 3344 element_animations_->Animate(kInitialTickTime);
3428
3429 animations->Animate(kInitialTickTime);
3430 EXPECT_EQ(0.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 3345 EXPECT_EQ(0.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
3431 3346
3432 // Opacity values are clipped [0,1] 3347 // Opacity values are clipped [0,1]
3433 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1000)); 3348 element_animations_->Animate(kInitialTickTime +
3349 TimeDelta::FromMilliseconds(1000));
3434 EXPECT_EQ(0.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 3350 EXPECT_EQ(0.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
3435 } 3351 }
3436 3352
3437 TEST_F(ElementAnimationsTest, PushedDeletedAnimationWaitsForActivation) { 3353 TEST_F(ElementAnimationsTest, PushedDeletedAnimationWaitsForActivation) {
3438 CreateTestLayer(true, true); 3354 CreateTestLayer(true, true);
3439 AttachTimelinePlayerLayer(); 3355 AttachTimelinePlayerLayer();
3440 CreateImplTimelineAndPlayer(); 3356 CreateImplTimelineAndPlayer();
3441 3357
3442 scoped_refptr<ElementAnimations> animations = element_animations();
3443 scoped_refptr<ElementAnimations> animations_impl = element_animations_impl();
3444
3445 auto events = host_impl_->CreateEvents(); 3358 auto events = host_impl_->CreateEvents();
3446 3359
3447 const int animation_id = AddOpacityTransitionToElementAnimations( 3360 const int animation_id =
3448 animations.get(), 1, 0.5f, 1.f, true); 3361 AddOpacityTransitionToPlayer(player_.get(), 1, 0.5f, 1.f, true);
3449 3362
3450 PushProperties(); 3363 PushProperties();
3451 animations_impl->ActivateAnimations(); 3364 player_impl_->ActivateAnimations();
3452 animations_impl->Animate(kInitialTickTime); 3365 element_animations_impl_->Animate(kInitialTickTime);
3453 animations_impl->UpdateState(true, events.get()); 3366 element_animations_impl_->UpdateState(true, events.get());
3454 EXPECT_EQ(Animation::RUNNING, 3367 EXPECT_EQ(Animation::RUNNING,
3455 animations_impl->GetAnimationById(animation_id)->run_state()); 3368 player_impl_->GetAnimationById(animation_id)->run_state());
3456 EXPECT_EQ(0.5f, 3369 EXPECT_EQ(0.5f,
3457 client_impl_.GetOpacity(element_id_, ElementListType::PENDING)); 3370 client_impl_.GetOpacity(element_id_, ElementListType::PENDING));
3458 EXPECT_EQ(0.5f, 3371 EXPECT_EQ(0.5f,
3459 client_impl_.GetOpacity(element_id_, ElementListType::ACTIVE)); 3372 client_impl_.GetOpacity(element_id_, ElementListType::ACTIVE));
3460 3373
3461 EXPECT_TRUE(animations_impl->GetAnimationById(animation_id) 3374 EXPECT_TRUE(
3462 ->affects_pending_elements()); 3375 player_impl_->GetAnimationById(animation_id)->affects_pending_elements());
3463 EXPECT_TRUE(animations_impl->GetAnimationById(animation_id) 3376 EXPECT_TRUE(
3464 ->affects_active_elements()); 3377 player_impl_->GetAnimationById(animation_id)->affects_active_elements());
3465 3378
3466 // Delete the animation on the main-thread animations. 3379 // Delete the animation on the main-thread animations.
3467 animations->RemoveAnimation( 3380 player_->RemoveAnimation(
3468 animations->GetAnimation(TargetProperty::OPACITY)->id()); 3381 player_->GetAnimation(TargetProperty::OPACITY)->id());
3469 PushProperties(); 3382 PushProperties();
3470 3383
3471 // The animation should no longer affect pending elements. 3384 // The animation should no longer affect pending elements.
3472 EXPECT_FALSE(animations_impl->GetAnimationById(animation_id) 3385 EXPECT_FALSE(
3473 ->affects_pending_elements()); 3386 player_impl_->GetAnimationById(animation_id)->affects_pending_elements());
3474 EXPECT_TRUE(animations_impl->GetAnimationById(animation_id) 3387 EXPECT_TRUE(
3475 ->affects_active_elements()); 3388 player_impl_->GetAnimationById(animation_id)->affects_active_elements());
3476 3389
3477 animations_impl->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(500)); 3390 element_animations_impl_->Animate(kInitialTickTime +
3478 animations_impl->UpdateState(true, events.get()); 3391 TimeDelta::FromMilliseconds(500));
3392 element_animations_impl_->UpdateState(true, events.get());
3479 3393
3480 // Only the active observer should have been ticked. 3394 // Only the active observer should have been ticked.
3481 EXPECT_EQ(0.5f, 3395 EXPECT_EQ(0.5f,
3482 client_impl_.GetOpacity(element_id_, ElementListType::PENDING)); 3396 client_impl_.GetOpacity(element_id_, ElementListType::PENDING));
3483 EXPECT_EQ(0.75f, 3397 EXPECT_EQ(0.75f,
3484 client_impl_.GetOpacity(element_id_, ElementListType::ACTIVE)); 3398 client_impl_.GetOpacity(element_id_, ElementListType::ACTIVE));
3485 3399
3486 animations_impl->ActivateAnimations(); 3400 player_impl_->ActivateAnimations();
3487 3401
3488 // Activation should cause the animation to be deleted. 3402 // Activation should cause the animation to be deleted.
3489 EXPECT_FALSE(animations_impl->HasAnyAnimation()); 3403 EXPECT_FALSE(player_impl_->has_any_animation());
3490 } 3404 }
3491 3405
3492 // Tests that an animation that affects only active elements won't block 3406 // Tests that an animation that affects only active elements won't block
3493 // an animation that affects only pending elements from starting. 3407 // an animation that affects only pending elements from starting.
3494 TEST_F(ElementAnimationsTest, StartAnimationsAffectingDifferentObservers) { 3408 TEST_F(ElementAnimationsTest, StartAnimationsAffectingDifferentObservers) {
3495 CreateTestLayer(true, true); 3409 CreateTestLayer(true, true);
3496 AttachTimelinePlayerLayer(); 3410 AttachTimelinePlayerLayer();
3497 CreateImplTimelineAndPlayer(); 3411 CreateImplTimelineAndPlayer();
3498 3412
3499 scoped_refptr<ElementAnimations> animations = element_animations();
3500 scoped_refptr<ElementAnimations> animations_impl = element_animations_impl();
3501
3502 auto events = host_impl_->CreateEvents(); 3413 auto events = host_impl_->CreateEvents();
3503 3414
3504 const int first_animation_id = AddOpacityTransitionToElementAnimations( 3415 const int first_animation_id =
3505 animations.get(), 1, 0.f, 1.f, true); 3416 AddOpacityTransitionToPlayer(player_.get(), 1, 0.f, 1.f, true);
3506 3417
3507 PushProperties(); 3418 PushProperties();
3508 animations_impl->ActivateAnimations(); 3419 player_impl_->ActivateAnimations();
3509 animations_impl->Animate(kInitialTickTime); 3420 element_animations_impl_->Animate(kInitialTickTime);
3510 animations_impl->UpdateState(true, events.get()); 3421 element_animations_impl_->UpdateState(true, events.get());
3511 3422
3512 // Remove the first animation from the main-thread animations, and add a 3423 // Remove the first animation from the main-thread animations, and add a
3513 // new animation affecting the same property. 3424 // new animation affecting the same property.
3514 animations->RemoveAnimation( 3425 player_->RemoveAnimation(
3515 animations->GetAnimation(TargetProperty::OPACITY)->id()); 3426 player_->GetAnimation(TargetProperty::OPACITY)->id());
3516 const int second_animation_id = AddOpacityTransitionToElementAnimations( 3427 const int second_animation_id =
3517 animations.get(), 1, 1.f, 0.5f, true); 3428 AddOpacityTransitionToPlayer(player_.get(), 1, 1.f, 0.5f, true);
3518 PushProperties(); 3429 PushProperties();
3519 3430
3520 // The original animation should only affect active elements, and the new 3431 // The original animation should only affect active elements, and the new
3521 // animation should only affect pending elements. 3432 // animation should only affect pending elements.
3522 EXPECT_FALSE(animations_impl->GetAnimationById(first_animation_id) 3433 EXPECT_FALSE(player_impl_->GetAnimationById(first_animation_id)
3523 ->affects_pending_elements()); 3434 ->affects_pending_elements());
3524 EXPECT_TRUE(animations_impl->GetAnimationById(first_animation_id) 3435 EXPECT_TRUE(player_impl_->GetAnimationById(first_animation_id)
3525 ->affects_active_elements()); 3436 ->affects_active_elements());
3526 EXPECT_TRUE(animations_impl->GetAnimationById(second_animation_id) 3437 EXPECT_TRUE(player_impl_->GetAnimationById(second_animation_id)
3527 ->affects_pending_elements()); 3438 ->affects_pending_elements());
3528 EXPECT_FALSE(animations_impl->GetAnimationById(second_animation_id) 3439 EXPECT_FALSE(player_impl_->GetAnimationById(second_animation_id)
3529 ->affects_active_elements()); 3440 ->affects_active_elements());
3530 3441
3531 animations_impl->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(500)); 3442 element_animations_impl_->Animate(kInitialTickTime +
3532 animations_impl->UpdateState(true, events.get()); 3443 TimeDelta::FromMilliseconds(500));
3444 element_animations_impl_->UpdateState(true, events.get());
3533 3445
3534 // The original animation should still be running, and the new animation 3446 // The original animation should still be running, and the new animation
3535 // should be starting. 3447 // should be starting.
3536 EXPECT_EQ(Animation::RUNNING, 3448 EXPECT_EQ(Animation::RUNNING,
3537 animations_impl->GetAnimationById(first_animation_id)->run_state()); 3449 player_impl_->GetAnimationById(first_animation_id)->run_state());
3538 EXPECT_EQ( 3450 EXPECT_EQ(Animation::STARTING,
3539 Animation::STARTING, 3451 player_impl_->GetAnimationById(second_animation_id)->run_state());
3540 animations_impl->GetAnimationById(second_animation_id)->run_state());
3541 3452
3542 // The active observer should have been ticked by the original animation, 3453 // The active observer should have been ticked by the original animation,
3543 // and the pending observer should have been ticked by the new animation. 3454 // and the pending observer should have been ticked by the new animation.
3544 EXPECT_EQ(1.f, 3455 EXPECT_EQ(1.f,
3545 client_impl_.GetOpacity(element_id_, ElementListType::PENDING)); 3456 client_impl_.GetOpacity(element_id_, ElementListType::PENDING));
3546 EXPECT_EQ(0.5f, 3457 EXPECT_EQ(0.5f,
3547 client_impl_.GetOpacity(element_id_, ElementListType::ACTIVE)); 3458 client_impl_.GetOpacity(element_id_, ElementListType::ACTIVE));
3548 3459
3549 animations_impl->ActivateAnimations(); 3460 player_impl_->ActivateAnimations();
3550 3461
3551 // The original animation should have been deleted, and the new animation 3462 // The original animation should have been deleted, and the new animation
3552 // should now affect both elements. 3463 // should now affect both elements.
3553 EXPECT_FALSE(animations_impl->GetAnimationById(first_animation_id)); 3464 EXPECT_FALSE(player_impl_->GetAnimationById(first_animation_id));
3554 EXPECT_TRUE(animations_impl->GetAnimationById(second_animation_id) 3465 EXPECT_TRUE(player_impl_->GetAnimationById(second_animation_id)
3555 ->affects_pending_elements()); 3466 ->affects_pending_elements());
3556 EXPECT_TRUE(animations_impl->GetAnimationById(second_animation_id) 3467 EXPECT_TRUE(player_impl_->GetAnimationById(second_animation_id)
3557 ->affects_active_elements()); 3468 ->affects_active_elements());
3558 3469
3559 animations_impl->Animate(kInitialTickTime + 3470 element_animations_impl_->Animate(kInitialTickTime +
3560 TimeDelta::FromMilliseconds(1000)); 3471 TimeDelta::FromMilliseconds(1000));
3561 animations_impl->UpdateState(true, events.get()); 3472 element_animations_impl_->UpdateState(true, events.get());
3562 3473
3563 // The new animation should be running, and the active observer should have 3474 // The new animation should be running, and the active observer should have
3564 // been ticked at the new animation's starting point. 3475 // been ticked at the new animation's starting point.
3565 EXPECT_EQ( 3476 EXPECT_EQ(Animation::RUNNING,
3566 Animation::RUNNING, 3477 player_impl_->GetAnimationById(second_animation_id)->run_state());
3567 animations_impl->GetAnimationById(second_animation_id)->run_state());
3568 EXPECT_EQ(1.f, 3478 EXPECT_EQ(1.f,
3569 client_impl_.GetOpacity(element_id_, ElementListType::PENDING)); 3479 client_impl_.GetOpacity(element_id_, ElementListType::PENDING));
3570 EXPECT_EQ(1.f, client_impl_.GetOpacity(element_id_, ElementListType::ACTIVE)); 3480 EXPECT_EQ(1.f, client_impl_.GetOpacity(element_id_, ElementListType::ACTIVE));
3571 } 3481 }
3572 3482
3573 TEST_F(ElementAnimationsTest, TestIsCurrentlyAnimatingProperty) { 3483 TEST_F(ElementAnimationsTest, TestIsCurrentlyAnimatingProperty) {
3574 CreateTestLayer(false, false); 3484 CreateTestLayer(false, false);
3575 AttachTimelinePlayerLayer(); 3485 AttachTimelinePlayerLayer();
3576 3486
3577 scoped_refptr<ElementAnimations> animations = element_animations();
3578
3579 // Create an animation that initially affects only pending elements. 3487 // Create an animation that initially affects only pending elements.
3580 std::unique_ptr<Animation> animation(CreateAnimation( 3488 std::unique_ptr<Animation> animation(CreateAnimation(
3581 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)), 3489 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)),
3582 1, TargetProperty::OPACITY)); 3490 1, TargetProperty::OPACITY));
3583 animation->set_affects_active_elements(false); 3491 animation->set_affects_active_elements(false);
3584 3492
3585 animations->AddAnimation(std::move(animation)); 3493 player_->AddAnimation(std::move(animation));
3586 animations->Animate(kInitialTickTime); 3494 element_animations_->Animate(kInitialTickTime);
3587 EXPECT_TRUE(animations->IsCurrentlyAnimatingProperty( 3495 EXPECT_TRUE(player_->IsCurrentlyAnimatingProperty(TargetProperty::OPACITY,
3588 TargetProperty::OPACITY, ElementListType::PENDING)); 3496 ElementListType::PENDING));
3589 EXPECT_FALSE(animations->IsCurrentlyAnimatingProperty( 3497 EXPECT_FALSE(player_->IsCurrentlyAnimatingProperty(TargetProperty::OPACITY,
3590 TargetProperty::OPACITY, ElementListType::ACTIVE)); 3498 ElementListType::ACTIVE));
3591 animations->UpdateState(true, nullptr); 3499 element_animations_->UpdateState(true, nullptr);
3592 EXPECT_TRUE(animations->HasActiveAnimation()); 3500 EXPECT_TRUE(player_->HasActiveAnimation());
3593 3501
3594 EXPECT_TRUE(animations->IsCurrentlyAnimatingProperty( 3502 EXPECT_TRUE(player_->IsCurrentlyAnimatingProperty(TargetProperty::OPACITY,
3595 TargetProperty::OPACITY, ElementListType::PENDING)); 3503 ElementListType::PENDING));
3596 EXPECT_FALSE(animations->IsCurrentlyAnimatingProperty( 3504 EXPECT_FALSE(player_->IsCurrentlyAnimatingProperty(TargetProperty::OPACITY,
3597 TargetProperty::OPACITY, ElementListType::ACTIVE)); 3505 ElementListType::ACTIVE));
3598 EXPECT_FALSE(animations->IsCurrentlyAnimatingProperty( 3506 EXPECT_FALSE(player_->IsCurrentlyAnimatingProperty(TargetProperty::FILTER,
3599 TargetProperty::FILTER, ElementListType::PENDING)); 3507 ElementListType::PENDING));
3600 EXPECT_FALSE(animations->IsCurrentlyAnimatingProperty( 3508 EXPECT_FALSE(player_->IsCurrentlyAnimatingProperty(TargetProperty::FILTER,
3601 TargetProperty::FILTER, ElementListType::ACTIVE)); 3509 ElementListType::ACTIVE));
3602 3510
3603 animations->ActivateAnimations(); 3511 player_->ActivateAnimations();
3604 3512
3605 EXPECT_TRUE(animations->IsCurrentlyAnimatingProperty( 3513 EXPECT_TRUE(player_->IsCurrentlyAnimatingProperty(TargetProperty::OPACITY,
3606 TargetProperty::OPACITY, ElementListType::PENDING)); 3514 ElementListType::PENDING));
3607 EXPECT_TRUE(animations->IsCurrentlyAnimatingProperty( 3515 EXPECT_TRUE(player_->IsCurrentlyAnimatingProperty(TargetProperty::OPACITY,
3608 TargetProperty::OPACITY, ElementListType::ACTIVE)); 3516 ElementListType::ACTIVE));
3609 EXPECT_FALSE(animations->IsCurrentlyAnimatingProperty( 3517 EXPECT_FALSE(player_->IsCurrentlyAnimatingProperty(TargetProperty::FILTER,
3610 TargetProperty::FILTER, ElementListType::PENDING)); 3518 ElementListType::PENDING));
3611 EXPECT_FALSE(animations->IsCurrentlyAnimatingProperty( 3519 EXPECT_FALSE(player_->IsCurrentlyAnimatingProperty(TargetProperty::FILTER,
3612 TargetProperty::FILTER, ElementListType::ACTIVE)); 3520 ElementListType::ACTIVE));
3613 3521
3614 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(10)); 3522 element_animations_->Animate(kInitialTickTime +
3615 animations->UpdateState(true, nullptr); 3523 TimeDelta::FromMilliseconds(10));
3524 element_animations_->UpdateState(true, nullptr);
3616 3525
3617 EXPECT_TRUE(animations->IsCurrentlyAnimatingProperty( 3526 EXPECT_TRUE(player_->IsCurrentlyAnimatingProperty(TargetProperty::OPACITY,
3618 TargetProperty::OPACITY, ElementListType::PENDING)); 3527 ElementListType::PENDING));
3619 EXPECT_TRUE(animations->IsCurrentlyAnimatingProperty( 3528 EXPECT_TRUE(player_->IsCurrentlyAnimatingProperty(TargetProperty::OPACITY,
3620 TargetProperty::OPACITY, ElementListType::ACTIVE)); 3529 ElementListType::ACTIVE));
3621 EXPECT_FALSE(animations->IsCurrentlyAnimatingProperty( 3530 EXPECT_FALSE(player_->IsCurrentlyAnimatingProperty(TargetProperty::FILTER,
3622 TargetProperty::FILTER, ElementListType::PENDING)); 3531 ElementListType::PENDING));
3623 EXPECT_FALSE(animations->IsCurrentlyAnimatingProperty( 3532 EXPECT_FALSE(player_->IsCurrentlyAnimatingProperty(TargetProperty::FILTER,
3624 TargetProperty::FILTER, ElementListType::ACTIVE)); 3533 ElementListType::ACTIVE));
3625 3534
3626 EXPECT_EQ(0.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 3535 EXPECT_EQ(0.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
3627 3536
3628 // Tick past the end of the animation. 3537 // Tick past the end of the animation.
3629 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1100)); 3538 element_animations_->Animate(kInitialTickTime +
3630 animations->UpdateState(true, nullptr); 3539 TimeDelta::FromMilliseconds(1100));
3540 element_animations_->UpdateState(true, nullptr);
3631 3541
3632 EXPECT_FALSE(animations->IsCurrentlyAnimatingProperty( 3542 EXPECT_FALSE(player_->IsCurrentlyAnimatingProperty(TargetProperty::OPACITY,
3633 TargetProperty::OPACITY, ElementListType::PENDING)); 3543 ElementListType::PENDING));
3634 EXPECT_FALSE(animations->IsCurrentlyAnimatingProperty( 3544 EXPECT_FALSE(player_->IsCurrentlyAnimatingProperty(TargetProperty::OPACITY,
3635 TargetProperty::OPACITY, ElementListType::ACTIVE)); 3545 ElementListType::ACTIVE));
3636 EXPECT_FALSE(animations->IsCurrentlyAnimatingProperty( 3546 EXPECT_FALSE(player_->IsCurrentlyAnimatingProperty(TargetProperty::FILTER,
3637 TargetProperty::FILTER, ElementListType::PENDING)); 3547 ElementListType::PENDING));
3638 EXPECT_FALSE(animations->IsCurrentlyAnimatingProperty( 3548 EXPECT_FALSE(player_->IsCurrentlyAnimatingProperty(TargetProperty::FILTER,
3639 TargetProperty::FILTER, ElementListType::ACTIVE)); 3549 ElementListType::ACTIVE));
3640 3550
3641 EXPECT_EQ(1.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); 3551 EXPECT_EQ(1.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE));
3642 } 3552 }
3643 3553
3644 TEST_F(ElementAnimationsTest, TestIsAnimatingPropertyTimeOffsetFillMode) { 3554 TEST_F(ElementAnimationsTest, TestIsAnimatingPropertyTimeOffsetFillMode) {
3645 CreateTestLayer(false, false); 3555 CreateTestLayer(false, false);
3646 AttachTimelinePlayerLayer(); 3556 AttachTimelinePlayerLayer();
3647 3557
3648 scoped_refptr<ElementAnimations> animations = element_animations();
3649
3650 // Create an animation that initially affects only pending elements, and has 3558 // Create an animation that initially affects only pending elements, and has
3651 // a start delay of 2 seconds. 3559 // a start delay of 2 seconds.
3652 std::unique_ptr<Animation> animation(CreateAnimation( 3560 std::unique_ptr<Animation> animation(CreateAnimation(
3653 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)), 3561 std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)),
3654 1, TargetProperty::OPACITY)); 3562 1, TargetProperty::OPACITY));
3655 animation->set_fill_mode(Animation::FillMode::NONE); 3563 animation->set_fill_mode(Animation::FillMode::NONE);
3656 animation->set_time_offset(TimeDelta::FromMilliseconds(-2000)); 3564 animation->set_time_offset(TimeDelta::FromMilliseconds(-2000));
3657 animation->set_affects_active_elements(false); 3565 animation->set_affects_active_elements(false);
3658 3566
3659 animations->AddAnimation(std::move(animation)); 3567 player_->AddAnimation(std::move(animation));
3660 3568
3661 animations->Animate(kInitialTickTime); 3569 element_animations_->Animate(kInitialTickTime);
3662 3570
3663 // Since the animation has a start delay, the elements it affects have a 3571 // Since the animation has a start delay, the elements it affects have a
3664 // potentially running transform animation but aren't currently animating 3572 // potentially running transform animation but aren't currently animating
3665 // transform. 3573 // transform.
3666 EXPECT_TRUE(animations->IsPotentiallyAnimatingProperty( 3574 EXPECT_TRUE(player_->IsPotentiallyAnimatingProperty(
3667 TargetProperty::OPACITY, ElementListType::PENDING)); 3575 TargetProperty::OPACITY, ElementListType::PENDING));
3668 EXPECT_FALSE(animations->IsPotentiallyAnimatingProperty( 3576 EXPECT_FALSE(player_->IsPotentiallyAnimatingProperty(
3669 TargetProperty::OPACITY, ElementListType::ACTIVE)); 3577 TargetProperty::OPACITY, ElementListType::ACTIVE));
3670 EXPECT_FALSE(animations->IsCurrentlyAnimatingProperty( 3578 EXPECT_FALSE(player_->IsCurrentlyAnimatingProperty(TargetProperty::OPACITY,
3671 TargetProperty::OPACITY, ElementListType::PENDING)); 3579 ElementListType::PENDING));
3672 EXPECT_FALSE(animations->IsCurrentlyAnimatingProperty( 3580 EXPECT_FALSE(player_->IsCurrentlyAnimatingProperty(TargetProperty::OPACITY,
3673 TargetProperty::OPACITY, ElementListType::ACTIVE)); 3581 ElementListType::ACTIVE));
3674 EXPECT_TRUE(animations->HasActiveAnimation()); 3582 EXPECT_TRUE(player_->HasActiveAnimation());
3675 EXPECT_FALSE(animations->IsPotentiallyAnimatingProperty( 3583 EXPECT_FALSE(player_->IsPotentiallyAnimatingProperty(
3676 TargetProperty::FILTER, ElementListType::PENDING)); 3584 TargetProperty::FILTER, ElementListType::PENDING));
3677 EXPECT_FALSE(animations->IsPotentiallyAnimatingProperty( 3585 EXPECT_FALSE(player_->IsPotentiallyAnimatingProperty(
3678 TargetProperty::FILTER, ElementListType::ACTIVE)); 3586 TargetProperty::FILTER, ElementListType::ACTIVE));
3679 3587
3680 animations->ActivateAnimations(); 3588 player_->ActivateAnimations();
3681 3589
3682 EXPECT_TRUE(animations->IsPotentiallyAnimatingProperty( 3590 EXPECT_TRUE(player_->IsPotentiallyAnimatingProperty(
3683 TargetProperty::OPACITY, ElementListType::PENDING)); 3591 TargetProperty::OPACITY, ElementListType::PENDING));
3684 EXPECT_TRUE(animations->IsPotentiallyAnimatingProperty( 3592 EXPECT_TRUE(player_->IsPotentiallyAnimatingProperty(TargetProperty::OPACITY,
3685 TargetProperty::OPACITY, ElementListType::ACTIVE)); 3593 ElementListType::ACTIVE));
3686 EXPECT_FALSE(animations->IsCurrentlyAnimatingProperty( 3594 EXPECT_FALSE(player_->IsCurrentlyAnimatingProperty(TargetProperty::OPACITY,
3687 TargetProperty::OPACITY, ElementListType::PENDING)); 3595 ElementListType::PENDING));
3688 EXPECT_FALSE(animations->IsCurrentlyAnimatingProperty( 3596 EXPECT_FALSE(player_->IsCurrentlyAnimatingProperty(TargetProperty::OPACITY,
3689 TargetProperty::OPACITY, ElementListType::ACTIVE)); 3597 ElementListType::ACTIVE));
3690 EXPECT_TRUE(animations->HasActiveAnimation()); 3598 EXPECT_TRUE(player_->HasActiveAnimation());
3691 EXPECT_FALSE(animations->IsPotentiallyAnimatingProperty( 3599 EXPECT_FALSE(player_->IsPotentiallyAnimatingProperty(
3692 TargetProperty::FILTER, ElementListType::PENDING)); 3600 TargetProperty::FILTER, ElementListType::PENDING));
3693 EXPECT_FALSE(animations->IsPotentiallyAnimatingProperty( 3601 EXPECT_FALSE(player_->IsPotentiallyAnimatingProperty(
3694 TargetProperty::FILTER, ElementListType::ACTIVE)); 3602 TargetProperty::FILTER, ElementListType::ACTIVE));
3695 3603
3696 animations->UpdateState(true, nullptr); 3604 element_animations_->UpdateState(true, nullptr);
3697 3605
3698 // Tick past the start delay. 3606 // Tick past the start delay.
3699 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(2000)); 3607 element_animations_->Animate(kInitialTickTime +
3700 animations->UpdateState(true, nullptr); 3608 TimeDelta::FromMilliseconds(2000));
3701 EXPECT_TRUE(animations->IsPotentiallyAnimatingProperty( 3609 element_animations_->UpdateState(true, nullptr);
3610 EXPECT_TRUE(player_->IsPotentiallyAnimatingProperty(
3702 TargetProperty::OPACITY, ElementListType::PENDING)); 3611 TargetProperty::OPACITY, ElementListType::PENDING));
3703 EXPECT_TRUE(animations->IsPotentiallyAnimatingProperty( 3612 EXPECT_TRUE(player_->IsPotentiallyAnimatingProperty(TargetProperty::OPACITY,
3704 TargetProperty::OPACITY, ElementListType::ACTIVE)); 3613 ElementListType::ACTIVE));
3705 EXPECT_TRUE(animations->IsCurrentlyAnimatingProperty( 3614 EXPECT_TRUE(player_->IsCurrentlyAnimatingProperty(TargetProperty::OPACITY,
3706 TargetProperty::OPACITY, ElementListType::PENDING)); 3615 ElementListType::PENDING));
3707 EXPECT_TRUE(animations->IsCurrentlyAnimatingProperty( 3616 EXPECT_TRUE(player_->IsCurrentlyAnimatingProperty(TargetProperty::OPACITY,
3708 TargetProperty::OPACITY, ElementListType::ACTIVE)); 3617 ElementListType::ACTIVE));
3709 3618
3710 // After the animaton finishes, the elements it affects have neither a 3619 // After the animaton finishes, the elements it affects have neither a
3711 // potentially running transform animation nor a currently running transform 3620 // potentially running transform animation nor a currently running transform
3712 // animation. 3621 // animation.
3713 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(4000)); 3622 element_animations_->Animate(kInitialTickTime +
3714 animations->UpdateState(true, nullptr); 3623 TimeDelta::FromMilliseconds(4000));
3715 EXPECT_FALSE(animations->IsPotentiallyAnimatingProperty( 3624 element_animations_->UpdateState(true, nullptr);
3625 EXPECT_FALSE(player_->IsPotentiallyAnimatingProperty(
3716 TargetProperty::OPACITY, ElementListType::PENDING)); 3626 TargetProperty::OPACITY, ElementListType::PENDING));
3717 EXPECT_FALSE(animations->IsPotentiallyAnimatingProperty( 3627 EXPECT_FALSE(player_->IsPotentiallyAnimatingProperty(
3718 TargetProperty::OPACITY, ElementListType::ACTIVE)); 3628 TargetProperty::OPACITY, ElementListType::ACTIVE));
3719 EXPECT_FALSE(animations->IsCurrentlyAnimatingProperty( 3629 EXPECT_FALSE(player_->IsCurrentlyAnimatingProperty(TargetProperty::OPACITY,
3720 TargetProperty::OPACITY, ElementListType::PENDING)); 3630 ElementListType::PENDING));
3721 EXPECT_FALSE(animations->IsCurrentlyAnimatingProperty( 3631 EXPECT_FALSE(player_->IsCurrentlyAnimatingProperty(TargetProperty::OPACITY,
3722 TargetProperty::OPACITY, ElementListType::ACTIVE)); 3632 ElementListType::ACTIVE));
3723 } 3633 }
3724 3634
3725 } // namespace 3635 } // namespace
3726 } // namespace cc 3636 } // namespace cc
OLDNEW
« no previous file with comments | « cc/animation/element_animations.cc ('k') | cc/animation/scroll_offset_animations_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698