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

Side by Side Diff: cc/test/animation_test_common.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/test/animation_test_common.h ('k') | cc/test/animation_timelines_test_common.h » ('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 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/test/animation_test_common.h" 5 #include "cc/test/animation_test_common.h"
6 6
7 #include "base/memory/ptr_util.h" 7 #include "base/memory/ptr_util.h"
8 #include "cc/animation/animation_host.h" 8 #include "cc/animation/animation_host.h"
9 #include "cc/animation/animation_id_provider.h" 9 #include "cc/animation/animation_id_provider.h"
10 #include "cc/animation/animation_player.h" 10 #include "cc/animation/animation_player.h"
11 #include "cc/animation/element_animations.h" 11 #include "cc/animation/element_animations.h"
12 #include "cc/animation/keyframed_animation_curve.h" 12 #include "cc/animation/keyframed_animation_curve.h"
13 #include "cc/animation/scroll_offset_animation_curve.h" 13 #include "cc/animation/scroll_offset_animation_curve.h"
14 #include "cc/animation/timing_function.h" 14 #include "cc/animation/timing_function.h"
15 #include "cc/animation/transform_operations.h" 15 #include "cc/animation/transform_operations.h"
16 #include "cc/base/time_util.h" 16 #include "cc/base/time_util.h"
17 #include "cc/layers/layer.h" 17 #include "cc/layers/layer.h"
18 #include "cc/layers/layer_impl.h" 18 #include "cc/layers/layer_impl.h"
19 19
20 using cc::Animation; 20 using cc::Animation;
21 using cc::AnimationCurve; 21 using cc::AnimationCurve;
22 using cc::FloatKeyframe; 22 using cc::FloatKeyframe;
23 using cc::KeyframedFloatAnimationCurve; 23 using cc::KeyframedFloatAnimationCurve;
24 using cc::KeyframedTransformAnimationCurve; 24 using cc::KeyframedTransformAnimationCurve;
25 using cc::TimingFunction; 25 using cc::TimingFunction;
26 using cc::TransformKeyframe; 26 using cc::TransformKeyframe;
27 27
28 namespace cc { 28 namespace cc {
29 29
30 template <class Target> 30 int AddOpacityTransition(AnimationPlayer* target,
31 int AddOpacityTransition(Target* target,
32 double duration, 31 double duration,
33 float start_opacity, 32 float start_opacity,
34 float end_opacity, 33 float end_opacity,
35 bool use_timing_function) { 34 bool use_timing_function) {
36 std::unique_ptr<KeyframedFloatAnimationCurve> curve( 35 std::unique_ptr<KeyframedFloatAnimationCurve> curve(
37 KeyframedFloatAnimationCurve::Create()); 36 KeyframedFloatAnimationCurve::Create());
38 37
39 std::unique_ptr<TimingFunction> func; 38 std::unique_ptr<TimingFunction> func;
40 if (!use_timing_function) 39 if (!use_timing_function)
41 func = CubicBezierTimingFunction::CreatePreset( 40 func = CubicBezierTimingFunction::CreatePreset(
42 CubicBezierTimingFunction::EaseType::EASE); 41 CubicBezierTimingFunction::EaseType::EASE);
43 if (duration > 0.0) 42 if (duration > 0.0)
44 curve->AddKeyframe(FloatKeyframe::Create(base::TimeDelta(), start_opacity, 43 curve->AddKeyframe(FloatKeyframe::Create(base::TimeDelta(), start_opacity,
45 std::move(func))); 44 std::move(func)));
46 curve->AddKeyframe(FloatKeyframe::Create( 45 curve->AddKeyframe(FloatKeyframe::Create(
47 base::TimeDelta::FromSecondsD(duration), end_opacity, nullptr)); 46 base::TimeDelta::FromSecondsD(duration), end_opacity, nullptr));
48 47
49 int id = AnimationIdProvider::NextAnimationId(); 48 int id = AnimationIdProvider::NextAnimationId();
50 49
51 std::unique_ptr<Animation> animation(Animation::Create( 50 std::unique_ptr<Animation> animation(Animation::Create(
52 std::move(curve), id, AnimationIdProvider::NextGroupId(), 51 std::move(curve), id, AnimationIdProvider::NextGroupId(),
53 TargetProperty::OPACITY)); 52 TargetProperty::OPACITY));
54 animation->set_needs_synchronized_start_time(true); 53 animation->set_needs_synchronized_start_time(true);
55 54
56 target->AddAnimation(std::move(animation)); 55 target->AddAnimation(std::move(animation));
57 return id; 56 return id;
58 } 57 }
59 58
60 template <class Target> 59 int AddAnimatedTransform(AnimationPlayer* target,
61 int AddAnimatedTransform(Target* target,
62 double duration, 60 double duration,
63 TransformOperations start_operations, 61 TransformOperations start_operations,
64 TransformOperations operations) { 62 TransformOperations operations) {
65 std::unique_ptr<KeyframedTransformAnimationCurve> curve( 63 std::unique_ptr<KeyframedTransformAnimationCurve> curve(
66 KeyframedTransformAnimationCurve::Create()); 64 KeyframedTransformAnimationCurve::Create());
67 65
68 if (duration > 0.0) { 66 if (duration > 0.0) {
69 curve->AddKeyframe(TransformKeyframe::Create(base::TimeDelta(), 67 curve->AddKeyframe(TransformKeyframe::Create(base::TimeDelta(),
70 start_operations, nullptr)); 68 start_operations, nullptr));
71 } 69 }
72 70
73 curve->AddKeyframe(TransformKeyframe::Create( 71 curve->AddKeyframe(TransformKeyframe::Create(
74 base::TimeDelta::FromSecondsD(duration), operations, nullptr)); 72 base::TimeDelta::FromSecondsD(duration), operations, nullptr));
75 73
76 int id = AnimationIdProvider::NextAnimationId(); 74 int id = AnimationIdProvider::NextAnimationId();
77 75
78 std::unique_ptr<Animation> animation(Animation::Create( 76 std::unique_ptr<Animation> animation(Animation::Create(
79 std::move(curve), id, AnimationIdProvider::NextGroupId(), 77 std::move(curve), id, AnimationIdProvider::NextGroupId(),
80 TargetProperty::TRANSFORM)); 78 TargetProperty::TRANSFORM));
81 animation->set_needs_synchronized_start_time(true); 79 animation->set_needs_synchronized_start_time(true);
82 80
83 target->AddAnimation(std::move(animation)); 81 target->AddAnimation(std::move(animation));
84 return id; 82 return id;
85 } 83 }
86 84
87 template <class Target> 85 int AddAnimatedTransform(AnimationPlayer* target,
88 int AddAnimatedTransform(Target* target,
89 double duration, 86 double duration,
90 int delta_x, 87 int delta_x,
91 int delta_y) { 88 int delta_y) {
92 TransformOperations start_operations; 89 TransformOperations start_operations;
93 if (duration > 0.0) { 90 if (duration > 0.0) {
94 start_operations.AppendTranslate(0, 0, 0.0); 91 start_operations.AppendTranslate(0, 0, 0.0);
95 } 92 }
96 93
97 TransformOperations operations; 94 TransformOperations operations;
98 operations.AppendTranslate(delta_x, delta_y, 0.0); 95 operations.AppendTranslate(delta_x, delta_y, 0.0);
99 return AddAnimatedTransform(target, duration, start_operations, operations); 96 return AddAnimatedTransform(target, duration, start_operations, operations);
100 } 97 }
101 98
102 template <class Target> 99 int AddAnimatedFilter(AnimationPlayer* target,
103 int AddAnimatedFilter(Target* target,
104 double duration, 100 double duration,
105 float start_brightness, 101 float start_brightness,
106 float end_brightness) { 102 float end_brightness) {
107 std::unique_ptr<KeyframedFilterAnimationCurve> curve( 103 std::unique_ptr<KeyframedFilterAnimationCurve> curve(
108 KeyframedFilterAnimationCurve::Create()); 104 KeyframedFilterAnimationCurve::Create());
109 105
110 if (duration > 0.0) { 106 if (duration > 0.0) {
111 FilterOperations start_filters; 107 FilterOperations start_filters;
112 start_filters.Append( 108 start_filters.Append(
113 FilterOperation::CreateBrightnessFilter(start_brightness)); 109 FilterOperation::CreateBrightnessFilter(start_brightness));
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 double progress = TimeUtil::Divide(time, duration_); 204 double progress = TimeUtil::Divide(time, duration_);
209 if (progress >= 1.0) 205 if (progress >= 1.0)
210 progress = 1.0; 206 progress = 1.0;
211 return (1.0 - progress) * from_ + progress * to_; 207 return (1.0 - progress) * from_ + progress * to_;
212 } 208 }
213 209
214 std::unique_ptr<AnimationCurve> FakeFloatTransition::Clone() const { 210 std::unique_ptr<AnimationCurve> FakeFloatTransition::Clone() const {
215 return base::WrapUnique(new FakeFloatTransition(*this)); 211 return base::WrapUnique(new FakeFloatTransition(*this));
216 } 212 }
217 213
218 int AddScrollOffsetAnimationToElementAnimations(ElementAnimations* target, 214 int AddScrollOffsetAnimationToPlayer(AnimationPlayer* player,
219 gfx::ScrollOffset initial_value, 215 gfx::ScrollOffset initial_value,
220 gfx::ScrollOffset target_value, 216 gfx::ScrollOffset target_value,
221 bool impl_only) { 217 bool impl_only) {
222 std::unique_ptr<ScrollOffsetAnimationCurve> curve( 218 std::unique_ptr<ScrollOffsetAnimationCurve> curve(
223 ScrollOffsetAnimationCurve::Create( 219 ScrollOffsetAnimationCurve::Create(
224 target_value, CubicBezierTimingFunction::CreatePreset( 220 target_value, CubicBezierTimingFunction::CreatePreset(
225 CubicBezierTimingFunction::EaseType::EASE_IN_OUT))); 221 CubicBezierTimingFunction::EaseType::EASE_IN_OUT)));
226 curve->SetInitialValue(initial_value); 222 curve->SetInitialValue(initial_value);
227 223
228 int id = AnimationIdProvider::NextAnimationId(); 224 int id = AnimationIdProvider::NextAnimationId();
229 225
230 std::unique_ptr<Animation> animation(Animation::Create( 226 std::unique_ptr<Animation> animation(Animation::Create(
231 std::move(curve), id, AnimationIdProvider::NextGroupId(), 227 std::move(curve), id, AnimationIdProvider::NextGroupId(),
232 TargetProperty::SCROLL_OFFSET)); 228 TargetProperty::SCROLL_OFFSET));
233 animation->set_is_impl_only(impl_only); 229 animation->set_is_impl_only(impl_only);
234 230
235 target->AddAnimation(std::move(animation)); 231 player->AddAnimation(std::move(animation));
236 232
237 return id; 233 return id;
238 } 234 }
239 235
240 int AddOpacityTransitionToElementAnimations(ElementAnimations* target,
241 double duration,
242 float start_opacity,
243 float end_opacity,
244 bool use_timing_function) {
245 return AddOpacityTransition(target, duration, start_opacity, end_opacity,
246 use_timing_function);
247 }
248
249 int AddAnimatedTransformToElementAnimations(ElementAnimations* target,
250 double duration,
251 int delta_x,
252 int delta_y) {
253 return AddAnimatedTransform(target, duration, delta_x, delta_y);
254 }
255
256 int AddAnimatedFilterToElementAnimations(ElementAnimations* target,
257 double duration,
258 float start_brightness,
259 float end_brightness) {
260 return AddAnimatedFilter(target, duration, start_brightness, end_brightness);
261 }
262
263 int AddAnimatedTransformToPlayer(AnimationPlayer* player, 236 int AddAnimatedTransformToPlayer(AnimationPlayer* player,
264 double duration, 237 double duration,
265 int delta_x, 238 int delta_x,
266 int delta_y) { 239 int delta_y) {
267 return AddAnimatedTransform(player, duration, delta_x, delta_y); 240 return AddAnimatedTransform(player, duration, delta_x, delta_y);
268 } 241 }
269 242
270 int AddAnimatedTransformToPlayer(AnimationPlayer* player, 243 int AddAnimatedTransformToPlayer(AnimationPlayer* player,
271 double duration, 244 double duration,
272 TransformOperations start_operations, 245 TransformOperations start_operations,
(...skipping 10 matching lines...) Expand all
283 use_timing_function); 256 use_timing_function);
284 } 257 }
285 258
286 int AddAnimatedFilterToPlayer(AnimationPlayer* player, 259 int AddAnimatedFilterToPlayer(AnimationPlayer* player,
287 double duration, 260 double duration,
288 float start_brightness, 261 float start_brightness,
289 float end_brightness) { 262 float end_brightness) {
290 return AddAnimatedFilter(player, duration, start_brightness, end_brightness); 263 return AddAnimatedFilter(player, duration, start_brightness, end_brightness);
291 } 264 }
292 265
293 int AddOpacityStepsToElementAnimations(ElementAnimations* target, 266 int AddOpacityStepsToPlayer(AnimationPlayer* player,
294 double duration, 267 double duration,
295 float start_opacity, 268 float start_opacity,
296 float end_opacity, 269 float end_opacity,
297 int num_steps) { 270 int num_steps) {
298 std::unique_ptr<KeyframedFloatAnimationCurve> curve( 271 std::unique_ptr<KeyframedFloatAnimationCurve> curve(
299 KeyframedFloatAnimationCurve::Create()); 272 KeyframedFloatAnimationCurve::Create());
300 273
301 std::unique_ptr<TimingFunction> func = StepsTimingFunction::Create( 274 std::unique_ptr<TimingFunction> func = StepsTimingFunction::Create(
302 num_steps, StepsTimingFunction::StepPosition::MIDDLE); 275 num_steps, StepsTimingFunction::StepPosition::MIDDLE);
303 if (duration > 0.0) 276 if (duration > 0.0)
304 curve->AddKeyframe(FloatKeyframe::Create(base::TimeDelta(), start_opacity, 277 curve->AddKeyframe(FloatKeyframe::Create(base::TimeDelta(), start_opacity,
305 std::move(func))); 278 std::move(func)));
306 curve->AddKeyframe(FloatKeyframe::Create( 279 curve->AddKeyframe(FloatKeyframe::Create(
307 base::TimeDelta::FromSecondsD(duration), end_opacity, nullptr)); 280 base::TimeDelta::FromSecondsD(duration), end_opacity, nullptr));
308 281
309 int id = AnimationIdProvider::NextAnimationId(); 282 int id = AnimationIdProvider::NextAnimationId();
310 283
311 std::unique_ptr<Animation> animation(Animation::Create( 284 std::unique_ptr<Animation> animation(Animation::Create(
312 std::move(curve), id, AnimationIdProvider::NextGroupId(), 285 std::move(curve), id, AnimationIdProvider::NextGroupId(),
313 TargetProperty::OPACITY)); 286 TargetProperty::OPACITY));
314 animation->set_needs_synchronized_start_time(true); 287 animation->set_needs_synchronized_start_time(true);
315 288
316 target->AddAnimation(std::move(animation)); 289 player->AddAnimation(std::move(animation));
317 return id; 290 return id;
318 } 291 }
319 292
320 void AddAnimationToElementWithPlayer(ElementId element_id, 293 void AddAnimationToElementWithPlayer(ElementId element_id,
321 scoped_refptr<AnimationTimeline> timeline, 294 scoped_refptr<AnimationTimeline> timeline,
322 std::unique_ptr<Animation> animation) { 295 std::unique_ptr<Animation> animation) {
323 scoped_refptr<AnimationPlayer> player = 296 scoped_refptr<AnimationPlayer> player =
324 AnimationPlayer::Create(AnimationIdProvider::NextPlayerId()); 297 AnimationPlayer::Create(AnimationIdProvider::NextPlayerId());
325 timeline->AttachPlayer(player); 298 timeline->AttachPlayer(player);
326 player->AttachElement(element_id); 299 player->AttachElement(element_id);
327 DCHECK(player->element_animations()); 300 DCHECK(player->element_animations());
328 player->AddAnimation(std::move(animation)); 301 player->AddAnimation(std::move(animation));
329 } 302 }
330 303
331 void AddAnimationToElementWithExistingPlayer( 304 void AddAnimationToElementWithExistingPlayer(
332 ElementId element_id, 305 ElementId element_id,
333 scoped_refptr<AnimationTimeline> timeline, 306 scoped_refptr<AnimationTimeline> timeline,
334 std::unique_ptr<Animation> animation) { 307 std::unique_ptr<Animation> animation) {
335 scoped_refptr<ElementAnimations> element_animations = 308 scoped_refptr<ElementAnimations> element_animations =
336 timeline->animation_host()->GetElementAnimationsForElementId(element_id); 309 timeline->animation_host()->GetElementAnimationsForElementId(element_id);
337 DCHECK(element_animations); 310 DCHECK(element_animations);
338 element_animations->AddAnimation(std::move(animation)); 311 DCHECK(element_animations->players_list().might_have_observers());
312 ElementAnimations::PlayersList::Iterator it(
313 &element_animations->players_list());
314 AnimationPlayer* player = it.GetNext();
315 DCHECK(player);
316 player->AddAnimation(std::move(animation));
339 } 317 }
340 318
341 void RemoveAnimationFromElementWithExistingPlayer( 319 void RemoveAnimationFromElementWithExistingPlayer(
342 ElementId element_id, 320 ElementId element_id,
343 scoped_refptr<AnimationTimeline> timeline, 321 scoped_refptr<AnimationTimeline> timeline,
344 int animation_id) { 322 int animation_id) {
345 scoped_refptr<ElementAnimations> element_animations = 323 scoped_refptr<ElementAnimations> element_animations =
346 timeline->animation_host()->GetElementAnimationsForElementId(element_id); 324 timeline->animation_host()->GetElementAnimationsForElementId(element_id);
347 DCHECK(element_animations); 325 DCHECK(element_animations);
348 element_animations->RemoveAnimation(animation_id); 326 DCHECK(element_animations->players_list().might_have_observers());
327 ElementAnimations::PlayersList::Iterator it(
328 &element_animations->players_list());
329 AnimationPlayer* player = it.GetNext();
330 DCHECK(player);
331 player->RemoveAnimation(animation_id);
349 } 332 }
350 333
351 Animation* GetAnimationFromElementWithExistingPlayer( 334 Animation* GetAnimationFromElementWithExistingPlayer(
352 ElementId element_id, 335 ElementId element_id,
353 scoped_refptr<AnimationTimeline> timeline, 336 scoped_refptr<AnimationTimeline> timeline,
354 int animation_id) { 337 int animation_id) {
355 scoped_refptr<ElementAnimations> element_animations = 338 scoped_refptr<ElementAnimations> element_animations =
356 timeline->animation_host()->GetElementAnimationsForElementId(element_id); 339 timeline->animation_host()->GetElementAnimationsForElementId(element_id);
357 DCHECK(element_animations); 340 DCHECK(element_animations);
358 return element_animations->GetAnimationById(animation_id); 341 DCHECK(element_animations->players_list().might_have_observers());
342 ElementAnimations::PlayersList::Iterator it(
343 &element_animations->players_list());
344 AnimationPlayer* player = it.GetNext();
345 DCHECK(player);
346 return player->GetAnimationById(animation_id);
359 } 347 }
360 348
361 int AddAnimatedFilterToElementWithPlayer( 349 int AddAnimatedFilterToElementWithPlayer(
362 ElementId element_id, 350 ElementId element_id,
363 scoped_refptr<AnimationTimeline> timeline, 351 scoped_refptr<AnimationTimeline> timeline,
364 double duration, 352 double duration,
365 float start_brightness, 353 float start_brightness,
366 float end_brightness) { 354 float end_brightness) {
367 scoped_refptr<AnimationPlayer> player = 355 scoped_refptr<AnimationPlayer> player =
368 AnimationPlayer::Create(AnimationIdProvider::NextPlayerId()); 356 AnimationPlayer::Create(AnimationIdProvider::NextPlayerId());
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
411 bool use_timing_function) { 399 bool use_timing_function) {
412 scoped_refptr<AnimationPlayer> player = 400 scoped_refptr<AnimationPlayer> player =
413 AnimationPlayer::Create(AnimationIdProvider::NextPlayerId()); 401 AnimationPlayer::Create(AnimationIdProvider::NextPlayerId());
414 timeline->AttachPlayer(player); 402 timeline->AttachPlayer(player);
415 player->AttachElement(element_id); 403 player->AttachElement(element_id);
416 DCHECK(player->element_animations()); 404 DCHECK(player->element_animations());
417 return AddOpacityTransitionToPlayer(player.get(), duration, start_opacity, 405 return AddOpacityTransitionToPlayer(player.get(), duration, start_opacity,
418 end_opacity, use_timing_function); 406 end_opacity, use_timing_function);
419 } 407 }
420 408
421 void AbortAnimationsOnElementWithPlayer(
422 ElementId element_id,
423 scoped_refptr<AnimationTimeline> timeline,
424 TargetProperty::Type target_property) {
425 scoped_refptr<ElementAnimations> element_animations =
426 timeline->animation_host()->GetElementAnimationsForElementId(element_id);
427 DCHECK(element_animations);
428 element_animations->AbortAnimations(target_property);
429 }
430
431 } // namespace cc 409 } // namespace cc
OLDNEW
« no previous file with comments | « cc/test/animation_test_common.h ('k') | cc/test/animation_timelines_test_common.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698