OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2013, Google Inc. All rights reserved. | 2 * Copyright (c) 2013, Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 25 matching lines...) Expand all Loading... |
36 #include "core/animation/AnimatableTransform.h" | 36 #include "core/animation/AnimatableTransform.h" |
37 #include "core/animation/AnimatableValueTestHelper.h" | 37 #include "core/animation/AnimatableValueTestHelper.h" |
38 #include "core/animation/CompositorAnimationsImpl.h" | 38 #include "core/animation/CompositorAnimationsImpl.h" |
39 #include "core/animation/CompositorAnimationsTestHelper.h" | 39 #include "core/animation/CompositorAnimationsTestHelper.h" |
40 #include "core/platform/animation/TimingFunctionTestHelper.h" | 40 #include "core/platform/animation/TimingFunctionTestHelper.h" |
41 #include "core/platform/graphics/filters/FilterOperations.h" | 41 #include "core/platform/graphics/filters/FilterOperations.h" |
42 #include "platform/geometry/IntSize.h" | 42 #include "platform/geometry/IntSize.h" |
43 #include "platform/transforms/TransformOperations.h" | 43 #include "platform/transforms/TransformOperations.h" |
44 #include "platform/transforms/TranslateTransformOperation.h" | 44 #include "platform/transforms/TranslateTransformOperation.h" |
45 #include "public/platform/WebAnimation.h" | 45 #include "public/platform/WebAnimation.h" |
| 46 #include "wtf/HashFunctions.h" |
46 #include "wtf/OwnPtr.h" | 47 #include "wtf/OwnPtr.h" |
47 #include "wtf/PassOwnPtr.h" | 48 #include "wtf/PassOwnPtr.h" |
48 #include "wtf/PassRefPtr.h" | 49 #include "wtf/PassRefPtr.h" |
49 #include "wtf/RefPtr.h" | 50 #include "wtf/RefPtr.h" |
50 | 51 |
51 #include <gmock/gmock.h> | 52 #include <gmock/gmock.h> |
52 #include <gtest/gtest.h> | 53 #include <gtest/gtest.h> |
53 | 54 |
54 namespace WebCore { | 55 namespace WebCore { |
55 | 56 |
56 using ::testing::CloneToPassOwnPtr; | 57 using ::testing::CloneToPassOwnPtr; |
57 using ::testing::ExpectationSet; | 58 using ::testing::ExpectationSet; |
58 using ::testing::Ref; | 59 using ::testing::Ref; |
59 using ::testing::Return; | 60 using ::testing::Return; |
60 using ::testing::_; | 61 using ::testing::_; |
61 | 62 |
62 class CoreAnimationCompositorAnimationsTest : public CoreAnimationCompositorAnim
ationsTestBase { | 63 class CoreAnimationCompositorAnimationsTest : public CoreAnimationCompositorAnim
ationsTestBase { |
63 | 64 |
64 protected: | 65 protected: |
65 RefPtr<TimingFunction> m_linearTimingFunction; | 66 RefPtr<TimingFunction> m_linearTimingFunction; |
66 RefPtr<TimingFunction> m_cubicEaseTimingFunction; | 67 RefPtr<TimingFunction> m_cubicEaseTimingFunction; |
67 RefPtr<TimingFunction> m_cubicCustomTimingFunction; | 68 RefPtr<TimingFunction> m_cubicCustomTimingFunction; |
68 RefPtr<TimingFunction> m_stepTimingFunction; | 69 RefPtr<TimingFunction> m_stepTimingFunction; |
69 | 70 |
70 Timing m_timing; | 71 Timing m_timing; |
| 72 CompositorAnimationsImpl::CompositorTiming m_compositorTiming; |
71 KeyframeAnimationEffect::KeyframeVector m_keyframeVector2; | 73 KeyframeAnimationEffect::KeyframeVector m_keyframeVector2; |
72 KeyframeAnimationEffect::KeyframeVector m_keyframeVector5; | 74 KeyframeAnimationEffect::KeyframeVector m_keyframeVector5; |
73 | 75 |
74 virtual void SetUp() | 76 virtual void SetUp() |
75 { | 77 { |
76 CoreAnimationCompositorAnimationsTestBase::SetUp(); | 78 CoreAnimationCompositorAnimationsTestBase::SetUp(); |
77 | 79 |
78 m_linearTimingFunction = LinearTimingFunction::create(); | 80 m_linearTimingFunction = LinearTimingFunction::create(); |
79 m_cubicEaseTimingFunction = CubicBezierTimingFunction::preset(CubicBezie
rTimingFunction::Ease); | 81 m_cubicEaseTimingFunction = CubicBezierTimingFunction::preset(CubicBezie
rTimingFunction::Ease); |
80 m_cubicCustomTimingFunction = CubicBezierTimingFunction::create(1, 2, 3,
4); | 82 m_cubicCustomTimingFunction = CubicBezierTimingFunction::create(1, 2, 3,
4); |
81 m_stepTimingFunction = StepsTimingFunction::create(1, false); | 83 m_stepTimingFunction = StepsTimingFunction::create(1, false); |
82 | 84 |
83 m_timing = createCompositableTiming(); | 85 m_timing = createCompositableTiming(); |
| 86 m_compositorTiming = CompositorAnimationsImpl::CompositorTiming(); |
| 87 // Make sure the CompositableTiming is really compositable, otherwise |
| 88 // most other tests will fail. |
| 89 ASSERT(convertTimingForCompositor(m_timing, m_compositorTiming)); |
84 | 90 |
85 m_keyframeVector2 = createCompositableFloatKeyframeVector(2); | 91 m_keyframeVector2 = createCompositableFloatKeyframeVector(2); |
86 m_keyframeVector5 = createCompositableFloatKeyframeVector(5); | 92 m_keyframeVector5 = createCompositableFloatKeyframeVector(5); |
87 } | 93 } |
88 | 94 |
89 public: | 95 public: |
90 | 96 |
| 97 bool convertTimingForCompositor(const Timing& t, CompositorAnimationsImpl::C
ompositorTiming& out) |
| 98 { |
| 99 return CompositorAnimationsImpl::convertTimingForCompositor(t, out); |
| 100 } |
91 bool isCandidateForCompositor(const Timing& t, KeyframeAnimationEffect::Keyf
rameVector& frames) | 101 bool isCandidateForCompositor(const Timing& t, KeyframeAnimationEffect::Keyf
rameVector& frames) |
92 { | 102 { |
93 return CompositorAnimationsImpl::isCandidateForCompositor(t, frames); | 103 return CompositorAnimationsImpl::isCandidateForCompositor(t, frames); |
94 } | 104 } |
95 bool isCandidateForCompositor(TimingFunction& t, KeyframeAnimationEffect::Ke
yframeVector& frames) | 105 bool isCandidateForCompositor(TimingFunction& t, KeyframeAnimationEffect::Ke
yframeVector& frames) |
96 { | 106 { |
97 return CompositorAnimationsImpl::isCandidateForCompositor(t, frames); | 107 return CompositorAnimationsImpl::isCandidateForCompositor(t, frames); |
98 } | 108 } |
99 bool isCandidateForCompositor(const Keyframe& k) | 109 bool isCandidateForCompositor(const Keyframe& k) |
100 { | 110 { |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
220 isCandidateForCompositor( | 230 isCandidateForCompositor( |
221 *createDefaultKeyframe(CSSPropertyColor, AnimationEffect::CompositeR
eplace).get())); | 231 *createDefaultKeyframe(CSSPropertyColor, AnimationEffect::CompositeR
eplace).get())); |
222 | 232 |
223 EXPECT_FALSE( | 233 EXPECT_FALSE( |
224 isCandidateForCompositor( | 234 isCandidateForCompositor( |
225 *createDefaultKeyframe(CSSPropertyColor, AnimationEffect::CompositeA
dd).get())); | 235 *createDefaultKeyframe(CSSPropertyColor, AnimationEffect::CompositeA
dd).get())); |
226 } | 236 } |
227 | 237 |
228 TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorKeyframeMu
ltipleCSSProperties) | 238 TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorKeyframeMu
ltipleCSSProperties) |
229 { | 239 { |
| 240 // In this test, we cheat by using an AnimatableDouble even with Transform |
| 241 // as the actual value isn't considered. |
230 RefPtr<Keyframe> keyframeGoodMultiple = createDefaultKeyframe(CSSPropertyOpa
city, AnimationEffect::CompositeReplace); | 242 RefPtr<Keyframe> keyframeGoodMultiple = createDefaultKeyframe(CSSPropertyOpa
city, AnimationEffect::CompositeReplace); |
231 // Cheat by using an AnimatableDouble as creating a AnimatableTransform is m
uch harder. | |
232 keyframeGoodMultiple->setPropertyValue(CSSPropertyWebkitTransform, Animatabl
eDouble::create(10.0).get()); | 243 keyframeGoodMultiple->setPropertyValue(CSSPropertyWebkitTransform, Animatabl
eDouble::create(10.0).get()); |
233 EXPECT_TRUE(isCandidateForCompositor(*keyframeGoodMultiple.get())); | 244 EXPECT_TRUE(isCandidateForCompositor(*keyframeGoodMultiple.get())); |
234 | 245 |
235 RefPtr<Keyframe> keyframeBadMultipleOp = createDefaultKeyframe(CSSPropertyOp
acity, AnimationEffect::CompositeAdd); | 246 RefPtr<Keyframe> keyframeBadMultipleOp = createDefaultKeyframe(CSSPropertyOp
acity, AnimationEffect::CompositeAdd); |
236 // Cheat by using an AnimatableDouble as creating a AnimatableTransform is m
uch harder. | |
237 keyframeBadMultipleOp->setPropertyValue(CSSPropertyWebkitTransform, Animatab
leDouble::create(10.0).get()); | 247 keyframeBadMultipleOp->setPropertyValue(CSSPropertyWebkitTransform, Animatab
leDouble::create(10.0).get()); |
238 EXPECT_FALSE(isCandidateForCompositor(*keyframeBadMultipleOp.get())); | 248 EXPECT_FALSE(isCandidateForCompositor(*keyframeBadMultipleOp.get())); |
239 | 249 |
240 RefPtr<Keyframe> keyframeBadMultipleID = createDefaultKeyframe(CSSPropertyOp
acity, AnimationEffect::CompositeReplace); | 250 // Check both an unsupported property which hashes before and after the |
241 keyframeBadMultipleID->setPropertyValue(CSSPropertyColor, AnimatableDouble::
create(10.0).get()); | 251 // supported property. |
242 EXPECT_FALSE(isCandidateForCompositor(*keyframeBadMultipleID.get())); | 252 typedef DefaultHash<CSSPropertyID>::Hash HashFunctions; |
| 253 |
| 254 RefPtr<Keyframe> keyframeBadMultiple1ID = createDefaultKeyframe(CSSPropertyC
olor, AnimationEffect::CompositeReplace); |
| 255 keyframeBadMultiple1ID->setPropertyValue(CSSPropertyOpacity, AnimatableDoubl
e::create(10.0).get()); |
| 256 EXPECT_FALSE(isCandidateForCompositor(*keyframeBadMultiple1ID.get())); |
| 257 EXPECT_LT(HashFunctions::hash(CSSPropertyColor), HashFunctions::hash(CSSProp
ertyOpacity)); |
| 258 |
| 259 RefPtr<Keyframe> keyframeBadMultiple2ID = createDefaultKeyframe(CSSPropertyW
ebkitTransform, AnimationEffect::CompositeReplace); |
| 260 keyframeBadMultiple2ID->setPropertyValue(CSSPropertyWidth, AnimatableDouble:
:create(10.0).get()); |
| 261 EXPECT_FALSE(isCandidateForCompositor(*keyframeBadMultiple2ID.get())); |
| 262 EXPECT_GT(HashFunctions::hash(CSSPropertyWebkitTransform), HashFunctions::ha
sh(CSSPropertyWidth)); |
243 } | 263 } |
244 | 264 |
245 TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorKeyframeEf
fectGoodSingleFrame) | 265 TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorKeyframeEf
fectGoodSingleFrame) |
246 { | 266 { |
247 KeyframeAnimationEffect::KeyframeVector frames; | 267 KeyframeAnimationEffect::KeyframeVector frames; |
248 frames.append(createDefaultKeyframe(CSSPropertyOpacity, AnimationEffect::Com
positeReplace).get()); | 268 frames.append(createDefaultKeyframe(CSSPropertyOpacity, AnimationEffect::Com
positeReplace).get()); |
249 EXPECT_TRUE(isCandidateForCompositor(*KeyframeAnimationEffect::create(frames
).get())); | 269 EXPECT_TRUE(isCandidateForCompositor(*KeyframeAnimationEffect::create(frames
).get())); |
250 } | 270 } |
251 | 271 |
252 TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorKeyframeEf
fectBadSingleFrame) | 272 TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorKeyframeEf
fectBadSingleFrame) |
(...skipping 27 matching lines...) Expand all Loading... |
280 framesMixedProperties.append(createDefaultKeyframe(CSSPropertyOpacity, Anima
tionEffect::CompositeReplace, 0.0).get()); | 300 framesMixedProperties.append(createDefaultKeyframe(CSSPropertyOpacity, Anima
tionEffect::CompositeReplace, 0.0).get()); |
281 framesMixedProperties.append(createDefaultKeyframe(CSSPropertyColor, Animati
onEffect::CompositeReplace, 1.0).get()); | 301 framesMixedProperties.append(createDefaultKeyframe(CSSPropertyColor, Animati
onEffect::CompositeReplace, 1.0).get()); |
282 EXPECT_FALSE(isCandidateForCompositor(*KeyframeAnimationEffect::create(frame
sMixedProperties).get())); | 302 EXPECT_FALSE(isCandidateForCompositor(*KeyframeAnimationEffect::create(frame
sMixedProperties).get())); |
283 | 303 |
284 KeyframeAnimationEffect::KeyframeVector framesMixedOps; | 304 KeyframeAnimationEffect::KeyframeVector framesMixedOps; |
285 framesMixedOps.append(createDefaultKeyframe(CSSPropertyOpacity, AnimationEff
ect::CompositeReplace, 0.0).get()); | 305 framesMixedOps.append(createDefaultKeyframe(CSSPropertyOpacity, AnimationEff
ect::CompositeReplace, 0.0).get()); |
286 framesMixedOps.append(createDefaultKeyframe(CSSPropertyOpacity, AnimationEff
ect::CompositeAdd, 1.0).get()); | 306 framesMixedOps.append(createDefaultKeyframe(CSSPropertyOpacity, AnimationEff
ect::CompositeAdd, 1.0).get()); |
287 EXPECT_FALSE(isCandidateForCompositor(*KeyframeAnimationEffect::create(frame
sMixedOps).get())); | 307 EXPECT_FALSE(isCandidateForCompositor(*KeyframeAnimationEffect::create(frame
sMixedOps).get())); |
288 } | 308 } |
289 | 309 |
290 TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTimingStar
tDelay) | 310 TEST_F(CoreAnimationCompositorAnimationsTest, ConvertTimingForCompositorStartDel
ay) |
291 { | 311 { |
| 312 m_timing.iterationDuration = 20.0; |
| 313 |
292 m_timing.startDelay = 2.0; | 314 m_timing.startDelay = 2.0; |
| 315 EXPECT_FALSE(convertTimingForCompositor(m_timing, m_compositorTiming)); |
| 316 |
| 317 m_timing.startDelay = -2.0; |
| 318 EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming)); |
| 319 EXPECT_DOUBLE_EQ(-2.0, m_compositorTiming.scaledTimeOffset); |
| 320 } |
| 321 |
| 322 TEST_F(CoreAnimationCompositorAnimationsTest, ConvertTimingForCompositorIteratio
nStart) |
| 323 { |
| 324 m_timing.iterationStart = 2.2; |
| 325 EXPECT_FALSE(convertTimingForCompositor(m_timing, m_compositorTiming)); |
| 326 } |
| 327 |
| 328 TEST_F(CoreAnimationCompositorAnimationsTest, ConvertTimingForCompositorIteratio
nCount) |
| 329 { |
| 330 m_timing.iterationCount = 5.0; |
| 331 EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming)); |
| 332 EXPECT_EQ(5, m_compositorTiming.adjustedIterationCount); |
| 333 |
| 334 m_timing.iterationCount = 5.5; |
| 335 EXPECT_FALSE(convertTimingForCompositor(m_timing, m_compositorTiming)); |
| 336 |
| 337 m_timing.iterationCount = std::numeric_limits<double>::infinity(); |
| 338 EXPECT_FALSE(convertTimingForCompositor(m_timing, m_compositorTiming)); |
| 339 |
| 340 #ifndef NDEBUG |
| 341 m_timing.iterationCount = -1; |
| 342 EXPECT_DEATH(convertTimingForCompositor(m_timing, m_compositorTiming), ""); |
| 343 #endif |
| 344 } |
| 345 |
| 346 TEST_F(CoreAnimationCompositorAnimationsTest, ConvertTimingForCompositorIteratio
nsAndStartDelay) |
| 347 { |
| 348 m_timing.iterationCount = 4.0; |
| 349 m_timing.iterationDuration = 5.0; |
| 350 |
| 351 m_timing.startDelay = -6.0; |
| 352 EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming)); |
| 353 EXPECT_DOUBLE_EQ(-1.0, m_compositorTiming.scaledTimeOffset); |
| 354 EXPECT_DOUBLE_EQ(3.0, m_compositorTiming.adjustedIterationCount); |
| 355 EXPECT_FALSE(m_compositorTiming.reverse); |
| 356 |
| 357 m_timing.iterationCount = 1.0; |
| 358 m_timing.iterationDuration = 5.0; |
| 359 m_timing.startDelay = -6.0; |
| 360 EXPECT_FALSE(convertTimingForCompositor(m_timing, m_compositorTiming)); |
| 361 |
| 362 m_timing.iterationCount = 5.0; |
| 363 m_timing.iterationDuration = 1.0; |
| 364 m_timing.startDelay = -6.0; |
| 365 EXPECT_FALSE(convertTimingForCompositor(m_timing, m_compositorTiming)); |
| 366 } |
| 367 |
| 368 TEST_F(CoreAnimationCompositorAnimationsTest, ConvertTimingForCompositorPlayback
Rate) |
| 369 { |
| 370 m_timing.playbackRate = 2.0; |
| 371 EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming)); |
| 372 |
| 373 m_timing.playbackRate = 0.0; |
| 374 EXPECT_FALSE(convertTimingForCompositor(m_timing, m_compositorTiming)); |
| 375 |
| 376 m_timing.playbackRate = -2.0; |
| 377 EXPECT_FALSE(convertTimingForCompositor(m_timing, m_compositorTiming)); |
| 378 } |
| 379 |
| 380 TEST_F(CoreAnimationCompositorAnimationsTest, ConvertTimingForCompositorPlayback
RateAdjustsDuration) |
| 381 { |
| 382 m_timing.iterationDuration = 10.0; |
| 383 m_timing.playbackRate = 2.0; |
| 384 EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming)); |
| 385 EXPECT_DOUBLE_EQ(5.0, m_compositorTiming.scaledDuration); |
| 386 } |
| 387 |
| 388 TEST_F(CoreAnimationCompositorAnimationsTest, ConvertTimingForCompositorPlayback
RateAdjustsOffset) |
| 389 { |
| 390 m_timing.iterationDuration = 12.0; |
| 391 m_timing.playbackRate = 2.0; |
| 392 m_timing.startDelay = -5.0; |
| 393 EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming)); |
| 394 EXPECT_DOUBLE_EQ(6.0, m_compositorTiming.scaledDuration); |
| 395 EXPECT_DOUBLE_EQ(-2.5, m_compositorTiming.scaledTimeOffset); |
| 396 } |
| 397 |
| 398 TEST_F(CoreAnimationCompositorAnimationsTest, ConvertTimingForCompositorDirectio
n) |
| 399 { |
| 400 m_timing.direction = Timing::PlaybackDirectionAlternate; |
| 401 EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming)); |
| 402 EXPECT_TRUE(m_compositorTiming.alternate); |
| 403 EXPECT_FALSE(m_compositorTiming.reverse); |
| 404 |
| 405 m_timing.direction = Timing::PlaybackDirectionAlternateReverse; |
| 406 EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming)); |
| 407 EXPECT_TRUE(m_compositorTiming.alternate); |
| 408 EXPECT_TRUE(m_compositorTiming.reverse); |
| 409 |
| 410 m_timing.direction = Timing::PlaybackDirectionReverse; |
| 411 EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming)); |
| 412 EXPECT_FALSE(m_compositorTiming.alternate); |
| 413 EXPECT_TRUE(m_compositorTiming.reverse); |
| 414 } |
| 415 |
| 416 TEST_F(CoreAnimationCompositorAnimationsTest, ConvertTimingForCompositorDirectio
nIterationsAndStartDelay) |
| 417 { |
| 418 m_timing.direction = Timing::PlaybackDirectionAlternate; |
| 419 m_timing.iterationCount = 4.0; |
| 420 m_timing.iterationDuration = 5.0; |
| 421 m_timing.startDelay = -6.0; |
| 422 EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming)); |
| 423 EXPECT_DOUBLE_EQ(-1.0, m_compositorTiming.scaledTimeOffset); |
| 424 EXPECT_EQ(3, m_compositorTiming.adjustedIterationCount); |
| 425 EXPECT_TRUE(m_compositorTiming.alternate); |
| 426 EXPECT_TRUE(m_compositorTiming.reverse); |
| 427 |
| 428 m_timing.direction = Timing::PlaybackDirectionAlternate; |
| 429 m_timing.iterationCount = 4.0; |
| 430 m_timing.iterationDuration = 5.0; |
| 431 m_timing.startDelay = -11.0; |
| 432 EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming)); |
| 433 EXPECT_DOUBLE_EQ(-1.0, m_compositorTiming.scaledTimeOffset); |
| 434 EXPECT_EQ(2, m_compositorTiming.adjustedIterationCount); |
| 435 EXPECT_TRUE(m_compositorTiming.alternate); |
| 436 EXPECT_FALSE(m_compositorTiming.reverse); |
| 437 |
| 438 m_timing.direction = Timing::PlaybackDirectionAlternateReverse; |
| 439 m_timing.iterationCount = 4.0; |
| 440 m_timing.iterationDuration = 5.0; |
| 441 m_timing.startDelay = -6.0; |
| 442 EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming)); |
| 443 EXPECT_DOUBLE_EQ(-1.0, m_compositorTiming.scaledTimeOffset); |
| 444 EXPECT_EQ(3, m_compositorTiming.adjustedIterationCount); |
| 445 EXPECT_TRUE(m_compositorTiming.alternate); |
| 446 EXPECT_FALSE(m_compositorTiming.reverse); |
| 447 |
| 448 m_timing.direction = Timing::PlaybackDirectionAlternateReverse; |
| 449 m_timing.iterationCount = 4.0; |
| 450 m_timing.iterationDuration = 5.0; |
| 451 m_timing.startDelay = -11.0; |
| 452 EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming)); |
| 453 EXPECT_DOUBLE_EQ(-1.0, m_compositorTiming.scaledTimeOffset); |
| 454 EXPECT_EQ(2, m_compositorTiming.adjustedIterationCount); |
| 455 EXPECT_TRUE(m_compositorTiming.alternate); |
| 456 EXPECT_TRUE(m_compositorTiming.reverse); |
| 457 } |
| 458 |
| 459 TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTiming) |
| 460 { |
293 EXPECT_TRUE(isCandidateForCompositor(m_timing, m_keyframeVector2)); | 461 EXPECT_TRUE(isCandidateForCompositor(m_timing, m_keyframeVector2)); |
294 | 462 |
295 m_timing.iterationCount = 5.0; | |
296 m_timing.startDelay = 2.0; | 463 m_timing.startDelay = 2.0; |
297 EXPECT_FALSE(isCandidateForCompositor(m_timing, m_keyframeVector2)); | 464 EXPECT_FALSE(isCandidateForCompositor(m_timing, m_keyframeVector2)); |
298 | |
299 m_timing.iterationCount = 5.0; | |
300 m_timing.startDelay = -2.0; | |
301 EXPECT_TRUE(isCandidateForCompositor(m_timing, m_keyframeVector2)); | |
302 } | |
303 | |
304 TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTimingFill
Mode) | |
305 { | |
306 m_timing.fillMode = Timing::FillModeForwards; | |
307 EXPECT_FALSE(isCandidateForCompositor(m_timing, m_keyframeVector2)); | |
308 } | 465 } |
309 | 466 |
310 TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTimingIter
ationStart) | |
311 { | |
312 m_timing.iterationStart = 2.2; | |
313 EXPECT_FALSE(isCandidateForCompositor(m_timing, m_keyframeVector2)); | |
314 } | |
315 | |
316 TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTimingIter
ationCount) | |
317 { | |
318 m_timing.iterationCount = 5.0; | |
319 EXPECT_TRUE(isCandidateForCompositor(m_timing, m_keyframeVector2)); | |
320 | |
321 m_timing.iterationCount = 5.5; | |
322 EXPECT_FALSE(isCandidateForCompositor(m_timing, m_keyframeVector2)); | |
323 | |
324 m_timing.iterationCount = -1.0; | |
325 EXPECT_FALSE(isCandidateForCompositor(m_timing, m_keyframeVector2)); | |
326 | |
327 m_timing.iterationCount = std::numeric_limits<double>::infinity(); | |
328 EXPECT_FALSE(isCandidateForCompositor(m_timing, m_keyframeVector2)); | |
329 | |
330 m_timing.iterationCount = -std::numeric_limits<double>::infinity(); | |
331 EXPECT_FALSE(isCandidateForCompositor(m_timing, m_keyframeVector2)); | |
332 } | |
333 | |
334 TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTimingIter
ationDuration) | |
335 { | |
336 m_timing.hasIterationDuration = false; | |
337 EXPECT_FALSE(isCandidateForCompositor(m_timing, m_keyframeVector2)); | |
338 } | |
339 | |
340 TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTimingPlay
backRate) | |
341 { | |
342 m_timing.playbackRate = 2.0; | |
343 EXPECT_TRUE(isCandidateForCompositor(m_timing, m_keyframeVector2)); | |
344 } | |
345 | |
346 TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTimingTimi
ngFunctionPassThru) | 467 TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTimingTimi
ngFunctionPassThru) |
347 { | 468 { |
348 m_timing.timingFunction = m_stepTimingFunction; | 469 m_timing.timingFunction = m_stepTimingFunction; |
349 EXPECT_FALSE(isCandidateForCompositor(m_timing, m_keyframeVector2)); | 470 EXPECT_FALSE(isCandidateForCompositor(m_timing, m_keyframeVector2)); |
350 } | 471 } |
351 | 472 |
352 TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTimingFunc
tionLinear) | 473 TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTimingFunc
tionLinear) |
353 { | 474 { |
354 EXPECT_TRUE(isCandidateForCompositor(*m_linearTimingFunction.get(), m_keyfra
meVector2)); | 475 EXPECT_TRUE(isCandidateForCompositor(*m_linearTimingFunction.get(), m_keyfra
meVector2)); |
355 EXPECT_TRUE(isCandidateForCompositor(*m_linearTimingFunction.get(), m_keyfra
meVector5)); | 476 EXPECT_TRUE(isCandidateForCompositor(*m_linearTimingFunction.get(), m_keyfra
meVector5)); |
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
596 usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(1.0,
5.0))); | 717 usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(1.0,
5.0))); |
597 | 718 |
598 // Create animation | 719 // Create animation |
599 blink::WebAnimationMock* mockAnimationPtr = new blink::WebAnimationMock(blin
k::WebAnimation::TargetPropertyOpacity); | 720 blink::WebAnimationMock* mockAnimationPtr = new blink::WebAnimationMock(blin
k::WebAnimation::TargetPropertyOpacity); |
600 ExpectationSet usesMockAnimation; | 721 ExpectationSet usesMockAnimation; |
601 | 722 |
602 usesMockCurve += EXPECT_CALL(mockCompositor, createAnimation(Ref(*mockCurveP
tr), blink::WebAnimation::TargetPropertyOpacity, _)) | 723 usesMockCurve += EXPECT_CALL(mockCompositor, createAnimation(Ref(*mockCurveP
tr), blink::WebAnimation::TargetPropertyOpacity, _)) |
603 .WillOnce(Return(mockAnimationPtr)); | 724 .WillOnce(Return(mockAnimationPtr)); |
604 | 725 |
605 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(1)); | 726 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(1)); |
| 727 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(0.0)); |
606 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setAlternatesDirection(f
alse)); | 728 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setAlternatesDirection(f
alse)); |
607 | 729 |
608 EXPECT_CALL(*mockAnimationPtr, delete_()) | 730 EXPECT_CALL(*mockAnimationPtr, delete_()) |
609 .Times(1) | 731 .Times(1) |
610 .After(usesMockAnimation); | 732 .After(usesMockAnimation); |
611 EXPECT_CALL(*mockCurvePtr, delete_()) | 733 EXPECT_CALL(*mockCurvePtr, delete_()) |
612 .Times(1) | 734 .Times(1) |
613 .After(usesMockCurve); | 735 .After(usesMockCurve); |
614 | 736 |
615 // Go! | 737 // Go! |
616 setCompositorForTesting(mockCompositor); | 738 setCompositorForTesting(mockCompositor); |
617 Vector<OwnPtr<blink::WebAnimation> > result; | 739 Vector<OwnPtr<blink::WebAnimation> > result; |
618 getCompositorAnimations(m_timing, *effect.get(), result); | 740 getCompositorAnimations(m_timing, *effect.get(), result); |
619 EXPECT_EQ(1U, result.size()); | 741 EXPECT_EQ(1U, result.size()); |
620 result[0].clear(); | 742 result[0].clear(); |
621 } | 743 } |
622 | 744 |
623 TEST_F(CoreAnimationCompositorAnimationsTest, createSimpleOpacityAnimationDurati
onPlaybackOffset) | 745 TEST_F(CoreAnimationCompositorAnimationsTest, createSimpleOpacityAnimationDurati
onPlayback) |
624 { | 746 { |
625 // Animation to convert | 747 // Animation to convert |
626 RefPtr<KeyframeAnimationEffect> effect = createKeyframeAnimationEffect( | 748 RefPtr<KeyframeAnimationEffect> effect = createKeyframeAnimationEffect( |
627 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(2.0
).get(), 0), | 749 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(2.0
).get(), 0), |
628 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0
).get(), 1.0)); | 750 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0
).get(), 1.0)); |
629 | 751 |
630 m_timing.iterationDuration = 10.0; | 752 m_timing.iterationDuration = 10.0; |
631 m_timing.playbackRate = 2.0; | 753 m_timing.playbackRate = 2.0; |
632 m_timing.startDelay = 200.0; | |
633 // -- | 754 // -- |
634 | 755 |
635 WebCompositorSupportMock mockCompositor; | 756 WebCompositorSupportMock mockCompositor; |
636 | 757 |
637 // Curve is created | 758 // Curve is created |
638 blink::WebFloatAnimationCurveMock* mockCurvePtr = new blink::WebFloatAnimati
onCurveMock; | 759 blink::WebFloatAnimationCurveMock* mockCurvePtr = new blink::WebFloatAnimati
onCurveMock; |
639 ExpectationSet usesMockCurve; | 760 ExpectationSet usesMockCurve; |
640 EXPECT_CALL(mockCompositor, createFloatAnimationCurve()) | 761 EXPECT_CALL(mockCompositor, createFloatAnimationCurve()) |
641 .WillOnce(Return(mockCurvePtr)); | 762 .WillOnce(Return(mockCurvePtr)); |
642 | 763 |
643 usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(100.
0, 2.0), blink::WebAnimationCurve::TimingFunctionTypeLinear)); | 764 usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(0.0,
2.0), blink::WebAnimationCurve::TimingFunctionTypeLinear)); |
644 usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(105.
0, 5.0))); | 765 usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(5.0,
5.0))); |
645 | 766 |
646 // Create animation | 767 // Create animation |
647 blink::WebAnimationMock* mockAnimationPtr = new blink::WebAnimationMock(blin
k::WebAnimation::TargetPropertyOpacity); | 768 blink::WebAnimationMock* mockAnimationPtr = new blink::WebAnimationMock(blin
k::WebAnimation::TargetPropertyOpacity); |
648 ExpectationSet usesMockAnimation; | 769 ExpectationSet usesMockAnimation; |
649 | 770 |
650 usesMockCurve += EXPECT_CALL(mockCompositor, createAnimation(Ref(*mockCurveP
tr), blink::WebAnimation::TargetPropertyOpacity, _)) | 771 usesMockCurve += EXPECT_CALL(mockCompositor, createAnimation(Ref(*mockCurveP
tr), blink::WebAnimation::TargetPropertyOpacity, _)) |
651 .WillOnce(Return(mockAnimationPtr)); | 772 .WillOnce(Return(mockAnimationPtr)); |
652 | 773 |
653 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(1)); | 774 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(1)); |
| 775 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(0.0)); |
654 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setAlternatesDirection(f
alse)); | 776 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setAlternatesDirection(f
alse)); |
655 | 777 |
656 EXPECT_CALL(*mockAnimationPtr, delete_()) | 778 EXPECT_CALL(*mockAnimationPtr, delete_()) |
657 .Times(1) | 779 .Times(1) |
658 .After(usesMockAnimation); | 780 .After(usesMockAnimation); |
659 EXPECT_CALL(*mockCurvePtr, delete_()) | 781 EXPECT_CALL(*mockCurvePtr, delete_()) |
660 .Times(1) | 782 .Times(1) |
661 .After(usesMockCurve); | 783 .After(usesMockCurve); |
662 | 784 |
663 // Go! | 785 // Go! |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
696 usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(1.0,
5.0))); | 818 usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(1.0,
5.0))); |
697 | 819 |
698 // Animation is created | 820 // Animation is created |
699 blink::WebAnimationMock* mockAnimationPtr = new blink::WebAnimationMock(blin
k::WebAnimation::TargetPropertyOpacity); | 821 blink::WebAnimationMock* mockAnimationPtr = new blink::WebAnimationMock(blin
k::WebAnimation::TargetPropertyOpacity); |
700 ExpectationSet usesMockAnimation; | 822 ExpectationSet usesMockAnimation; |
701 | 823 |
702 usesMockCurve += EXPECT_CALL(mockCompositor, createAnimation(Ref(*mockCurveP
tr), blink::WebAnimation::TargetPropertyOpacity, _)) | 824 usesMockCurve += EXPECT_CALL(mockCompositor, createAnimation(Ref(*mockCurveP
tr), blink::WebAnimation::TargetPropertyOpacity, _)) |
703 .WillOnce(Return(mockAnimationPtr)); | 825 .WillOnce(Return(mockAnimationPtr)); |
704 | 826 |
705 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(5)); | 827 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(5)); |
| 828 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(0.0)); |
706 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setAlternatesDirection(t
rue)); | 829 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setAlternatesDirection(t
rue)); |
707 | 830 |
708 EXPECT_CALL(*mockAnimationPtr, delete_()) | 831 EXPECT_CALL(*mockAnimationPtr, delete_()) |
709 .Times(1) | 832 .Times(1) |
710 .After(usesMockAnimation); | 833 .After(usesMockAnimation); |
711 EXPECT_CALL(*mockCurvePtr, delete_()) | 834 EXPECT_CALL(*mockCurvePtr, delete_()) |
712 .Times(1) | 835 .Times(1) |
713 .After(usesMockCurve); | 836 .After(usesMockCurve); |
714 | 837 |
715 // Go! | 838 // Go! |
716 setCompositorForTesting(mockCompositor); | 839 setCompositorForTesting(mockCompositor); |
717 Vector<OwnPtr<blink::WebAnimation> > result; | 840 Vector<OwnPtr<blink::WebAnimation> > result; |
718 getCompositorAnimations(m_timing, *effect.get(), result); | 841 getCompositorAnimations(m_timing, *effect.get(), result); |
719 EXPECT_EQ(1U, result.size()); | 842 EXPECT_EQ(1U, result.size()); |
720 result[0].clear(); | 843 result[0].clear(); |
721 } | 844 } |
722 | 845 |
723 TEST_F(CoreAnimationCompositorAnimationsTest, createSimpleOpacityAnimationNegati
veStartDelay) | 846 TEST_F(CoreAnimationCompositorAnimationsTest, createSimpleOpacityAnimationNegati
veStartDelay) |
724 { | 847 { |
725 // Animation to convert | 848 // Animation to convert |
726 RefPtr<KeyframeAnimationEffect> effect = createKeyframeAnimationEffect( | 849 RefPtr<KeyframeAnimationEffect> effect = createKeyframeAnimationEffect( |
727 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(2.0
).get(), 0), | 850 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(2.0
).get(), 0), |
728 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0
).get(), 1.0)); | 851 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0
).get(), 1.0)); |
729 | 852 |
730 m_timing.iterationCount = 5.0; | 853 m_timing.iterationCount = 5.0; |
731 m_timing.iterationDuration = 2.0; | 854 m_timing.iterationDuration = 1.75; |
732 m_timing.startDelay = -3; | 855 m_timing.startDelay = -3.25; |
733 // -- | 856 // -- |
734 | 857 |
735 WebCompositorSupportMock mockCompositor; | 858 WebCompositorSupportMock mockCompositor; |
736 | 859 |
737 // Curve is created | 860 // Curve is created |
738 blink::WebFloatAnimationCurveMock* mockCurvePtr = new blink::WebFloatAnimati
onCurveMock; | 861 blink::WebFloatAnimationCurveMock* mockCurvePtr = new blink::WebFloatAnimati
onCurveMock; |
739 ExpectationSet usesMockCurve; | 862 ExpectationSet usesMockCurve; |
740 EXPECT_CALL(mockCompositor, createFloatAnimationCurve()) | 863 EXPECT_CALL(mockCompositor, createFloatAnimationCurve()) |
741 .WillOnce(Return(mockCurvePtr)); | 864 .WillOnce(Return(mockCurvePtr)); |
742 | 865 |
743 usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(0.0,
2.0), blink::WebAnimationCurve::TimingFunctionTypeLinear)); | 866 usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(0.0,
2.0), blink::WebAnimationCurve::TimingFunctionTypeLinear)); |
744 usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(2.0,
5.0))); | 867 usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(1.75
, 5.0))); |
745 | 868 |
746 // Create animation | 869 // Create animation |
747 blink::WebAnimationMock* mockAnimationPtr = new blink::WebAnimationMock(blin
k::WebAnimation::TargetPropertyOpacity); | 870 blink::WebAnimationMock* mockAnimationPtr = new blink::WebAnimationMock(blin
k::WebAnimation::TargetPropertyOpacity); |
748 ExpectationSet usesMockAnimation; | 871 ExpectationSet usesMockAnimation; |
749 | 872 |
750 usesMockCurve += EXPECT_CALL(mockCompositor, createAnimation(Ref(*mockCurveP
tr), blink::WebAnimation::TargetPropertyOpacity, _)) | 873 usesMockCurve += EXPECT_CALL(mockCompositor, createAnimation(Ref(*mockCurveP
tr), blink::WebAnimation::TargetPropertyOpacity, _)) |
751 .WillOnce(Return(mockAnimationPtr)); | 874 .WillOnce(Return(mockAnimationPtr)); |
752 | 875 |
753 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(-1.0)); | |
754 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(4)); | 876 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(4)); |
| 877 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(-1.5)); |
755 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setAlternatesDirection(f
alse)); | 878 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setAlternatesDirection(f
alse)); |
756 | 879 |
757 EXPECT_CALL(*mockAnimationPtr, delete_()) | 880 EXPECT_CALL(*mockAnimationPtr, delete_()) |
758 .Times(1) | 881 .Times(1) |
759 .After(usesMockAnimation); | 882 .After(usesMockAnimation); |
760 EXPECT_CALL(*mockCurvePtr, delete_()) | 883 EXPECT_CALL(*mockCurvePtr, delete_()) |
761 .Times(1) | 884 .Times(1) |
762 .After(usesMockCurve); | 885 .After(usesMockCurve); |
763 | 886 |
764 // Go! | 887 // Go! |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
803 usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(1.0,
5.0))); | 926 usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(1.0,
5.0))); |
804 | 927 |
805 // Animation is created | 928 // Animation is created |
806 blink::WebAnimationMock* mockAnimationPtr = new blink::WebAnimationMock(blin
k::WebAnimation::TargetPropertyOpacity); | 929 blink::WebAnimationMock* mockAnimationPtr = new blink::WebAnimationMock(blin
k::WebAnimation::TargetPropertyOpacity); |
807 ExpectationSet usesMockAnimation; | 930 ExpectationSet usesMockAnimation; |
808 | 931 |
809 usesMockCurve += EXPECT_CALL(mockCompositor, createAnimation(Ref(*mockCurveP
tr), blink::WebAnimation::TargetPropertyOpacity, _)) | 932 usesMockCurve += EXPECT_CALL(mockCompositor, createAnimation(Ref(*mockCurveP
tr), blink::WebAnimation::TargetPropertyOpacity, _)) |
810 .WillOnce(Return(mockAnimationPtr)); | 933 .WillOnce(Return(mockAnimationPtr)); |
811 | 934 |
812 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(10)); | 935 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(10)); |
| 936 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(0.0)); |
813 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setAlternatesDirection(t
rue)); | 937 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setAlternatesDirection(t
rue)); |
814 | 938 |
815 EXPECT_CALL(*mockAnimationPtr, delete_()) | 939 EXPECT_CALL(*mockAnimationPtr, delete_()) |
816 .Times(1) | 940 .Times(1) |
817 .After(usesMockAnimation); | 941 .After(usesMockAnimation); |
818 EXPECT_CALL(*mockCurvePtr, delete_()) | 942 EXPECT_CALL(*mockCurvePtr, delete_()) |
819 .Times(1) | 943 .Times(1) |
820 .After(usesMockCurve); | 944 .After(usesMockCurve); |
821 | 945 |
822 // Go! | 946 // Go! |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
862 usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(1.0,
2.0))); | 986 usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(1.0,
2.0))); |
863 | 987 |
864 // Create the animation | 988 // Create the animation |
865 blink::WebAnimationMock* mockAnimationPtr = new blink::WebAnimationMock(blin
k::WebAnimation::TargetPropertyOpacity); | 989 blink::WebAnimationMock* mockAnimationPtr = new blink::WebAnimationMock(blin
k::WebAnimation::TargetPropertyOpacity); |
866 ExpectationSet usesMockAnimation; | 990 ExpectationSet usesMockAnimation; |
867 | 991 |
868 usesMockCurve += EXPECT_CALL(mockCompositor, createAnimation(Ref(*mockCurveP
tr), blink::WebAnimation::TargetPropertyOpacity, _)) | 992 usesMockCurve += EXPECT_CALL(mockCompositor, createAnimation(Ref(*mockCurveP
tr), blink::WebAnimation::TargetPropertyOpacity, _)) |
869 .WillOnce(Return(mockAnimationPtr)); | 993 .WillOnce(Return(mockAnimationPtr)); |
870 | 994 |
871 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(10)); | 995 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(10)); |
| 996 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(0.0)); |
872 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setAlternatesDirection(t
rue)); | 997 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setAlternatesDirection(t
rue)); |
873 | 998 |
874 EXPECT_CALL(*mockAnimationPtr, delete_()) | 999 EXPECT_CALL(*mockAnimationPtr, delete_()) |
875 .Times(1) | 1000 .Times(1) |
876 .After(usesMockAnimation); | 1001 .After(usesMockAnimation); |
877 EXPECT_CALL(*mockCurvePtr, delete_()) | 1002 EXPECT_CALL(*mockCurvePtr, delete_()) |
878 .Times(1) | 1003 .Times(1) |
879 .After(usesMockCurve); | 1004 .After(usesMockCurve); |
880 | 1005 |
881 // Go! | 1006 // Go! |
882 setCompositorForTesting(mockCompositor); | 1007 setCompositorForTesting(mockCompositor); |
883 Vector<OwnPtr<blink::WebAnimation> > result; | 1008 Vector<OwnPtr<blink::WebAnimation> > result; |
884 getCompositorAnimations(m_timing, *effect.get(), result); | 1009 getCompositorAnimations(m_timing, *effect.get(), result); |
885 EXPECT_EQ(1U, result.size()); | 1010 EXPECT_EQ(1U, result.size()); |
886 result[0].clear(); | 1011 result[0].clear(); |
887 } | 1012 } |
888 | 1013 |
889 TEST_F(CoreAnimationCompositorAnimationsTest, createReversedOpacityAnimationDura
tionPlaybackOffset) | 1014 TEST_F(CoreAnimationCompositorAnimationsTest, createReversedOpacityAnimationNega
tiveStartDelay) |
890 { | 1015 { |
891 // Animation to convert | 1016 // Animation to convert |
892 RefPtr<KeyframeAnimationEffect> effect = createKeyframeAnimationEffect( | 1017 RefPtr<KeyframeAnimationEffect> effect = createKeyframeAnimationEffect( |
893 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(2.0
).get(), 0), | 1018 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(2.0
).get(), 0), |
894 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0
).get(), 1.0)); | 1019 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0
).get(), 1.0)); |
895 | 1020 |
896 m_timing.iterationDuration = 10.0; | 1021 m_timing.iterationCount = 5.0; |
897 m_timing.playbackRate = 2.0; | 1022 m_timing.iterationDuration = 2.0; |
898 m_timing.startDelay = 200.0; | 1023 m_timing.startDelay = -3; |
899 m_timing.direction = Timing::PlaybackDirectionReverse; | 1024 m_timing.direction = Timing::PlaybackDirectionAlternateReverse; |
900 // -- | 1025 // -- |
901 | 1026 |
902 WebCompositorSupportMock mockCompositor; | 1027 WebCompositorSupportMock mockCompositor; |
903 | 1028 |
904 // Curve is created | 1029 // Curve is created |
905 blink::WebFloatAnimationCurveMock* mockCurvePtr = new blink::WebFloatAnimati
onCurveMock; | 1030 blink::WebFloatAnimationCurveMock* mockCurvePtr = new blink::WebFloatAnimati
onCurveMock; |
906 ExpectationSet usesMockCurve; | 1031 ExpectationSet usesMockCurve; |
907 EXPECT_CALL(mockCompositor, createFloatAnimationCurve()) | 1032 EXPECT_CALL(mockCompositor, createFloatAnimationCurve()) |
908 .WillOnce(Return(mockCurvePtr)); | 1033 .WillOnce(Return(mockCurvePtr)); |
909 | 1034 |
910 usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(100.
0, 5.0), blink::WebAnimationCurve::TimingFunctionTypeLinear)); | 1035 usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(0.0,
2.0), blink::WebAnimationCurve::TimingFunctionTypeLinear)); |
911 usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(105.
0, 2.0))); | 1036 usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(2.0,
5.0))); |
912 | 1037 |
913 // Create animation | 1038 // Create animation |
914 blink::WebAnimationMock* mockAnimationPtr = new blink::WebAnimationMock(blin
k::WebAnimation::TargetPropertyOpacity); | 1039 blink::WebAnimationMock* mockAnimationPtr = new blink::WebAnimationMock(blin
k::WebAnimation::TargetPropertyOpacity); |
915 ExpectationSet usesMockAnimation; | 1040 ExpectationSet usesMockAnimation; |
916 | 1041 |
917 usesMockCurve += EXPECT_CALL(mockCompositor, createAnimation(Ref(*mockCurveP
tr), blink::WebAnimation::TargetPropertyOpacity, _)) | 1042 usesMockCurve += EXPECT_CALL(mockCompositor, createAnimation(Ref(*mockCurveP
tr), blink::WebAnimation::TargetPropertyOpacity, _)) |
918 .WillOnce(Return(mockAnimationPtr)); | 1043 .WillOnce(Return(mockAnimationPtr)); |
919 | 1044 |
920 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(1)); | 1045 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(4)); |
921 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setAlternatesDirection(f
alse)); | 1046 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(-1.0)); |
| 1047 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setAlternatesDirection(t
rue)); |
922 | 1048 |
923 EXPECT_CALL(*mockAnimationPtr, delete_()) | 1049 EXPECT_CALL(*mockAnimationPtr, delete_()) |
924 .Times(1) | 1050 .Times(1) |
925 .After(usesMockAnimation); | 1051 .After(usesMockAnimation); |
926 EXPECT_CALL(*mockCurvePtr, delete_()) | 1052 EXPECT_CALL(*mockCurvePtr, delete_()) |
927 .Times(1) | 1053 .Times(1) |
928 .After(usesMockCurve); | 1054 .After(usesMockCurve); |
929 | 1055 |
930 // Go! | 1056 // Go! |
931 setCompositorForTesting(mockCompositor); | 1057 setCompositorForTesting(mockCompositor); |
932 Vector<OwnPtr<blink::WebAnimation> > result; | 1058 Vector<OwnPtr<blink::WebAnimation> > result; |
933 getCompositorAnimations(m_timing, *effect.get(), result); | 1059 getCompositorAnimations(m_timing, *effect.get(), result); |
934 EXPECT_EQ(1U, result.size()); | 1060 EXPECT_EQ(1U, result.size()); |
935 result[0].clear(); | 1061 result[0].clear(); |
936 } | 1062 } |
937 | 1063 |
| 1064 |
938 } // namespace WebCore | 1065 } // namespace WebCore |
OLD | NEW |