| Index: Source/core/animation/CompositorAnimationsTest.cpp
|
| diff --git a/Source/core/animation/CompositorAnimationsTest.cpp b/Source/core/animation/CompositorAnimationsTest.cpp
|
| index ea6337f10fb0502979f28af5b542fd5c40b65e77..f5b738ef93b820a34f0bc64b2fbc60d04236dde7 100644
|
| --- a/Source/core/animation/CompositorAnimationsTest.cpp
|
| +++ b/Source/core/animation/CompositorAnimationsTest.cpp
|
| @@ -43,6 +43,7 @@
|
| #include "platform/transforms/TransformOperations.h"
|
| #include "platform/transforms/TranslateTransformOperation.h"
|
| #include "public/platform/WebAnimation.h"
|
| +#include "wtf/HashFunctions.h"
|
| #include "wtf/OwnPtr.h"
|
| #include "wtf/PassOwnPtr.h"
|
| #include "wtf/PassRefPtr.h"
|
| @@ -68,6 +69,7 @@ protected:
|
| RefPtr<TimingFunction> m_stepTimingFunction;
|
|
|
| Timing m_timing;
|
| + CompositorAnimationsImpl::CompositorTiming m_compositorTiming;
|
| KeyframeAnimationEffect::KeyframeVector m_keyframeVector2;
|
| KeyframeAnimationEffect::KeyframeVector m_keyframeVector5;
|
|
|
| @@ -81,6 +83,10 @@ protected:
|
| m_stepTimingFunction = StepsTimingFunction::create(1, false);
|
|
|
| m_timing = createCompositableTiming();
|
| + m_compositorTiming = CompositorAnimationsImpl::CompositorTiming();
|
| + // Make sure the CompositableTiming is really compositable, otherwise
|
| + // most other tests will fail.
|
| + ASSERT(convertTimingForCompositor(m_timing, m_compositorTiming));
|
|
|
| m_keyframeVector2 = createCompositableFloatKeyframeVector(2);
|
| m_keyframeVector5 = createCompositableFloatKeyframeVector(5);
|
| @@ -88,11 +94,15 @@ protected:
|
|
|
| public:
|
|
|
| - bool isCandidateForCompositor(const Timing& t, KeyframeAnimationEffect::KeyframeVector& frames)
|
| + bool convertTimingForCompositor(const Timing& t, CompositorAnimationsImpl::CompositorTiming& out)
|
| + {
|
| + return CompositorAnimationsImpl::convertTimingForCompositor(t, out);
|
| + }
|
| + bool isCandidateForCompositor(const Timing& t, const KeyframeAnimationEffect::KeyframeVector& frames)
|
| {
|
| return CompositorAnimationsImpl::isCandidateForCompositor(t, frames);
|
| }
|
| - bool isCandidateForCompositor(TimingFunction& t, KeyframeAnimationEffect::KeyframeVector& frames)
|
| + bool isCandidateForCompositor(TimingFunction& t, const KeyframeAnimationEffect::KeyframeVector* frames)
|
| {
|
| return CompositorAnimationsImpl::isCandidateForCompositor(t, frames);
|
| }
|
| @@ -227,19 +237,29 @@ TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorKeyframeCS
|
|
|
| TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorKeyframeMultipleCSSProperties)
|
| {
|
| + // In this test, we cheat by using an AnimatableDouble even with Transform
|
| + // as the actual value isn't considered.
|
| RefPtr<Keyframe> keyframeGoodMultiple = createDefaultKeyframe(CSSPropertyOpacity, AnimationEffect::CompositeReplace);
|
| - // Cheat by using an AnimatableDouble as creating a AnimatableTransform is much harder.
|
| keyframeGoodMultiple->setPropertyValue(CSSPropertyWebkitTransform, AnimatableDouble::create(10.0).get());
|
| EXPECT_TRUE(isCandidateForCompositor(*keyframeGoodMultiple.get()));
|
|
|
| RefPtr<Keyframe> keyframeBadMultipleOp = createDefaultKeyframe(CSSPropertyOpacity, AnimationEffect::CompositeAdd);
|
| - // Cheat by using an AnimatableDouble as creating a AnimatableTransform is much harder.
|
| keyframeBadMultipleOp->setPropertyValue(CSSPropertyWebkitTransform, AnimatableDouble::create(10.0).get());
|
| EXPECT_FALSE(isCandidateForCompositor(*keyframeBadMultipleOp.get()));
|
|
|
| - RefPtr<Keyframe> keyframeBadMultipleID = createDefaultKeyframe(CSSPropertyOpacity, AnimationEffect::CompositeReplace);
|
| - keyframeBadMultipleID->setPropertyValue(CSSPropertyColor, AnimatableDouble::create(10.0).get());
|
| - EXPECT_FALSE(isCandidateForCompositor(*keyframeBadMultipleID.get()));
|
| + // Check both an unsupported property which hashes before and after the
|
| + // supported property.
|
| + typedef DefaultHash<CSSPropertyID>::Hash HashFunctions;
|
| +
|
| + RefPtr<Keyframe> keyframeBadMultiple1ID = createDefaultKeyframe(CSSPropertyColor, AnimationEffect::CompositeReplace);
|
| + keyframeBadMultiple1ID->setPropertyValue(CSSPropertyOpacity, AnimatableDouble::create(10.0).get());
|
| + EXPECT_FALSE(isCandidateForCompositor(*keyframeBadMultiple1ID.get()));
|
| + EXPECT_LT(HashFunctions::hash(CSSPropertyColor), HashFunctions::hash(CSSPropertyOpacity));
|
| +
|
| + RefPtr<Keyframe> keyframeBadMultiple2ID = createDefaultKeyframe(CSSPropertyWebkitTransform, AnimationEffect::CompositeReplace);
|
| + keyframeBadMultiple2ID->setPropertyValue(CSSPropertyWidth, AnimatableDouble::create(10.0).get());
|
| + EXPECT_FALSE(isCandidateForCompositor(*keyframeBadMultiple2ID.get()));
|
| + EXPECT_GT(HashFunctions::hash(CSSPropertyWebkitTransform), HashFunctions::hash(CSSPropertyWidth));
|
| }
|
|
|
| TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorKeyframeEffectGoodSingleFrame)
|
| @@ -287,60 +307,143 @@ TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorKeyframeEf
|
| EXPECT_FALSE(isCandidateForCompositor(*KeyframeAnimationEffect::create(framesMixedOps).get()));
|
| }
|
|
|
| -TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTimingStartDelay)
|
| +TEST_F(CoreAnimationCompositorAnimationsTest, ConvertTimingForCompositorStartDelay)
|
| {
|
| - m_timing.startDelay = 2.0;
|
| - EXPECT_TRUE(isCandidateForCompositor(m_timing, m_keyframeVector2));
|
| + m_timing.iterationDuration = 20.0;
|
|
|
| - m_timing.iterationCount = 5.0;
|
| m_timing.startDelay = 2.0;
|
| - EXPECT_FALSE(isCandidateForCompositor(m_timing, m_keyframeVector2));
|
| + EXPECT_FALSE(convertTimingForCompositor(m_timing, m_compositorTiming));
|
|
|
| - m_timing.iterationCount = 5.0;
|
| m_timing.startDelay = -2.0;
|
| - EXPECT_TRUE(isCandidateForCompositor(m_timing, m_keyframeVector2));
|
| + EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming));
|
| + EXPECT_DOUBLE_EQ(-2.0, m_compositorTiming.scaledTimeOffset);
|
| }
|
|
|
| -TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTimingFillMode)
|
| -{
|
| - m_timing.fillMode = Timing::FillModeForwards;
|
| - EXPECT_FALSE(isCandidateForCompositor(m_timing, m_keyframeVector2));
|
| -}
|
| -
|
| -TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTimingIterationStart)
|
| +TEST_F(CoreAnimationCompositorAnimationsTest, ConvertTimingForCompositorIterationStart)
|
| {
|
| m_timing.iterationStart = 2.2;
|
| - EXPECT_FALSE(isCandidateForCompositor(m_timing, m_keyframeVector2));
|
| + EXPECT_FALSE(convertTimingForCompositor(m_timing, m_compositorTiming));
|
| }
|
|
|
| -TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTimingIterationCount)
|
| +TEST_F(CoreAnimationCompositorAnimationsTest, ConvertTimingForCompositorIterationCount)
|
| {
|
| m_timing.iterationCount = 5.0;
|
| - EXPECT_TRUE(isCandidateForCompositor(m_timing, m_keyframeVector2));
|
| + EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming));
|
| + EXPECT_EQ(5, m_compositorTiming.adjustedIterationCount);
|
|
|
| m_timing.iterationCount = 5.5;
|
| - EXPECT_FALSE(isCandidateForCompositor(m_timing, m_keyframeVector2));
|
| -
|
| - m_timing.iterationCount = -1.0;
|
| - EXPECT_FALSE(isCandidateForCompositor(m_timing, m_keyframeVector2));
|
| + EXPECT_FALSE(convertTimingForCompositor(m_timing, m_compositorTiming));
|
|
|
| m_timing.iterationCount = std::numeric_limits<double>::infinity();
|
| - EXPECT_FALSE(isCandidateForCompositor(m_timing, m_keyframeVector2));
|
| + EXPECT_FALSE(convertTimingForCompositor(m_timing, m_compositorTiming));
|
|
|
| - m_timing.iterationCount = -std::numeric_limits<double>::infinity();
|
| - EXPECT_FALSE(isCandidateForCompositor(m_timing, m_keyframeVector2));
|
| +#ifndef NDEBUG
|
| + m_timing.iterationCount = -1;
|
| + EXPECT_DEATH(convertTimingForCompositor(m_timing, m_compositorTiming), "");
|
| +#endif
|
| }
|
|
|
| -TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTimingIterationDuration)
|
| +TEST_F(CoreAnimationCompositorAnimationsTest, ConvertTimingForCompositorIterationsAndStartDelay)
|
| {
|
| - m_timing.hasIterationDuration = false;
|
| - EXPECT_FALSE(isCandidateForCompositor(m_timing, m_keyframeVector2));
|
| + m_timing.iterationCount = 4.0;
|
| + m_timing.iterationDuration = 5.0;
|
| +
|
| + m_timing.startDelay = -6.0;
|
| + EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming));
|
| + EXPECT_DOUBLE_EQ(-1.0, m_compositorTiming.scaledTimeOffset);
|
| + EXPECT_DOUBLE_EQ(3.0, m_compositorTiming.adjustedIterationCount);
|
| + EXPECT_FALSE(m_compositorTiming.reverse);
|
| +
|
| + m_timing.iterationCount = 1.0;
|
| + m_timing.iterationDuration = 5.0;
|
| + m_timing.startDelay = -6.0;
|
| + EXPECT_FALSE(convertTimingForCompositor(m_timing, m_compositorTiming));
|
| +
|
| + m_timing.iterationCount = 5.0;
|
| + m_timing.iterationDuration = 1.0;
|
| + m_timing.startDelay = -6.0;
|
| + EXPECT_FALSE(convertTimingForCompositor(m_timing, m_compositorTiming));
|
| }
|
|
|
| -TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTimingPlaybackRate)
|
| +TEST_F(CoreAnimationCompositorAnimationsTest, ConvertTimingForCompositorPlaybackRate)
|
| {
|
| m_timing.playbackRate = 2.0;
|
| + EXPECT_FALSE(convertTimingForCompositor(m_timing, m_compositorTiming));
|
| +
|
| + m_timing.playbackRate = 0.0;
|
| + EXPECT_FALSE(convertTimingForCompositor(m_timing, m_compositorTiming));
|
| +
|
| + m_timing.playbackRate = -2.0;
|
| + EXPECT_FALSE(convertTimingForCompositor(m_timing, m_compositorTiming));
|
| +}
|
| +
|
| +TEST_F(CoreAnimationCompositorAnimationsTest, ConvertTimingForCompositorDirection)
|
| +{
|
| + m_timing.direction = Timing::PlaybackDirectionAlternate;
|
| + EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming));
|
| + EXPECT_TRUE(m_compositorTiming.alternate);
|
| + EXPECT_FALSE(m_compositorTiming.reverse);
|
| +
|
| + m_timing.direction = Timing::PlaybackDirectionAlternateReverse;
|
| + EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming));
|
| + EXPECT_TRUE(m_compositorTiming.alternate);
|
| + EXPECT_TRUE(m_compositorTiming.reverse);
|
| +
|
| + m_timing.direction = Timing::PlaybackDirectionReverse;
|
| + EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming));
|
| + EXPECT_FALSE(m_compositorTiming.alternate);
|
| + EXPECT_TRUE(m_compositorTiming.reverse);
|
| +}
|
| +
|
| +TEST_F(CoreAnimationCompositorAnimationsTest, ConvertTimingForCompositorDirectionIterationsAndStartDelay)
|
| +{
|
| + m_timing.direction = Timing::PlaybackDirectionAlternate;
|
| + m_timing.iterationCount = 4.0;
|
| + m_timing.iterationDuration = 5.0;
|
| + m_timing.startDelay = -6.0;
|
| + EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming));
|
| + EXPECT_DOUBLE_EQ(-1.0, m_compositorTiming.scaledTimeOffset);
|
| + EXPECT_EQ(3, m_compositorTiming.adjustedIterationCount);
|
| + EXPECT_TRUE(m_compositorTiming.alternate);
|
| + EXPECT_TRUE(m_compositorTiming.reverse);
|
| +
|
| + m_timing.direction = Timing::PlaybackDirectionAlternate;
|
| + m_timing.iterationCount = 4.0;
|
| + m_timing.iterationDuration = 5.0;
|
| + m_timing.startDelay = -11.0;
|
| + EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming));
|
| + EXPECT_DOUBLE_EQ(-1.0, m_compositorTiming.scaledTimeOffset);
|
| + EXPECT_EQ(2, m_compositorTiming.adjustedIterationCount);
|
| + EXPECT_TRUE(m_compositorTiming.alternate);
|
| + EXPECT_FALSE(m_compositorTiming.reverse);
|
| +
|
| + m_timing.direction = Timing::PlaybackDirectionAlternateReverse;
|
| + m_timing.iterationCount = 4.0;
|
| + m_timing.iterationDuration = 5.0;
|
| + m_timing.startDelay = -6.0;
|
| + EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming));
|
| + EXPECT_DOUBLE_EQ(-1.0, m_compositorTiming.scaledTimeOffset);
|
| + EXPECT_EQ(3, m_compositorTiming.adjustedIterationCount);
|
| + EXPECT_TRUE(m_compositorTiming.alternate);
|
| + EXPECT_FALSE(m_compositorTiming.reverse);
|
| +
|
| + m_timing.direction = Timing::PlaybackDirectionAlternateReverse;
|
| + m_timing.iterationCount = 4.0;
|
| + m_timing.iterationDuration = 5.0;
|
| + m_timing.startDelay = -11.0;
|
| + EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming));
|
| + EXPECT_DOUBLE_EQ(-1.0, m_compositorTiming.scaledTimeOffset);
|
| + EXPECT_EQ(2, m_compositorTiming.adjustedIterationCount);
|
| + EXPECT_TRUE(m_compositorTiming.alternate);
|
| + EXPECT_TRUE(m_compositorTiming.reverse);
|
| +}
|
| +
|
| +TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTiming)
|
| +{
|
| EXPECT_TRUE(isCandidateForCompositor(m_timing, m_keyframeVector2));
|
| +
|
| + m_timing.startDelay = 2.0;
|
| + EXPECT_FALSE(isCandidateForCompositor(m_timing, m_keyframeVector2));
|
| }
|
|
|
| TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTimingTimingFunctionPassThru)
|
| @@ -351,46 +454,46 @@ TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTimingTimi
|
|
|
| TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTimingFunctionLinear)
|
| {
|
| - EXPECT_TRUE(isCandidateForCompositor(*m_linearTimingFunction.get(), m_keyframeVector2));
|
| - EXPECT_TRUE(isCandidateForCompositor(*m_linearTimingFunction.get(), m_keyframeVector5));
|
| + EXPECT_TRUE(isCandidateForCompositor(*m_linearTimingFunction.get(), &m_keyframeVector2));
|
| + EXPECT_TRUE(isCandidateForCompositor(*m_linearTimingFunction.get(), &m_keyframeVector5));
|
| }
|
|
|
| TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTimingFunctionCubic)
|
| {
|
| // Cubic bezier are okay if we only have two keyframes
|
| - EXPECT_TRUE(isCandidateForCompositor(*m_cubicEaseTimingFunction.get(), m_keyframeVector2));
|
| - EXPECT_FALSE(isCandidateForCompositor(*m_cubicEaseTimingFunction.get(), m_keyframeVector5));
|
| + EXPECT_TRUE(isCandidateForCompositor(*m_cubicEaseTimingFunction.get(), &m_keyframeVector2));
|
| + EXPECT_FALSE(isCandidateForCompositor(*m_cubicEaseTimingFunction.get(), &m_keyframeVector5));
|
|
|
| - EXPECT_TRUE(isCandidateForCompositor(*m_cubicCustomTimingFunction.get(), m_keyframeVector2));
|
| - EXPECT_FALSE(isCandidateForCompositor(*m_cubicCustomTimingFunction.get(), m_keyframeVector5));
|
| + EXPECT_TRUE(isCandidateForCompositor(*m_cubicCustomTimingFunction.get(), &m_keyframeVector2));
|
| + EXPECT_FALSE(isCandidateForCompositor(*m_cubicCustomTimingFunction.get(), &m_keyframeVector5));
|
| }
|
|
|
| TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTimingFunctionSteps)
|
| {
|
| RefPtr<TimingFunction> stepTiming = StepsTimingFunction::create(1, false);
|
| - EXPECT_FALSE(isCandidateForCompositor(*m_stepTimingFunction.get(), m_keyframeVector2));
|
| - EXPECT_FALSE(isCandidateForCompositor(*m_stepTimingFunction.get(), m_keyframeVector5));
|
| + EXPECT_FALSE(isCandidateForCompositor(*m_stepTimingFunction.get(), &m_keyframeVector2));
|
| + EXPECT_FALSE(isCandidateForCompositor(*m_stepTimingFunction.get(), &m_keyframeVector5));
|
| }
|
|
|
| TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTimingFunctionChainedEmpty)
|
| {
|
| RefPtr<ChainedTimingFunction> chainedEmpty = ChainedTimingFunction::create();
|
| - EXPECT_FALSE(isCandidateForCompositor(*chainedEmpty.get(), m_keyframeVector2));
|
| - EXPECT_FALSE(isCandidateForCompositor(*chainedEmpty.get(), m_keyframeVector5));
|
| + EXPECT_FALSE(isCandidateForCompositor(*chainedEmpty.get(), &m_keyframeVector2));
|
| + EXPECT_FALSE(isCandidateForCompositor(*chainedEmpty.get(), &m_keyframeVector5));
|
| }
|
|
|
| TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTimingFunctionChainedLinear)
|
| {
|
| RefPtr<ChainedTimingFunction> chainedLinearSingle = ChainedTimingFunction::create();
|
| chainedLinearSingle->appendSegment(1.0, m_linearTimingFunction.get());
|
| - EXPECT_TRUE(isCandidateForCompositor(*chainedLinearSingle.get(), m_keyframeVector2));
|
| + EXPECT_TRUE(isCandidateForCompositor(*chainedLinearSingle.get(), &m_keyframeVector2));
|
|
|
| RefPtr<ChainedTimingFunction> chainedLinearMultiple = ChainedTimingFunction::create();
|
| chainedLinearMultiple->appendSegment(0.25, m_linearTimingFunction.get());
|
| chainedLinearMultiple->appendSegment(0.5, m_linearTimingFunction.get());
|
| chainedLinearMultiple->appendSegment(0.75, m_linearTimingFunction.get());
|
| chainedLinearMultiple->appendSegment(1.0, m_linearTimingFunction.get());
|
| - EXPECT_TRUE(isCandidateForCompositor(*chainedLinearMultiple.get(), m_keyframeVector5));
|
| + EXPECT_TRUE(isCandidateForCompositor(*chainedLinearMultiple.get(), &m_keyframeVector5));
|
|
|
| // FIXME: Technically a chained timing function of linear functions don't
|
| // have to be aligned to keyframes. We don't support that currently as
|
| @@ -401,53 +504,53 @@ TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTimingFunc
|
| {
|
| RefPtr<ChainedTimingFunction> chainedSingleAGood = ChainedTimingFunction::create();
|
| chainedSingleAGood->appendSegment(1.0, m_cubicEaseTimingFunction.get());
|
| - EXPECT_TRUE(isCandidateForCompositor(*chainedSingleAGood.get(), m_keyframeVector2));
|
| + EXPECT_TRUE(isCandidateForCompositor(*chainedSingleAGood.get(), &m_keyframeVector2));
|
|
|
| RefPtr<ChainedTimingFunction> chainedSingleBGood = ChainedTimingFunction::create();
|
| chainedSingleBGood->appendSegment(1.0, m_cubicCustomTimingFunction.get());
|
| - EXPECT_TRUE(isCandidateForCompositor(*chainedSingleBGood.get(), m_keyframeVector2));
|
| + EXPECT_TRUE(isCandidateForCompositor(*chainedSingleBGood.get(), &m_keyframeVector2));
|
|
|
| RefPtr<ChainedTimingFunction> chainedMultipleGood = ChainedTimingFunction::create();
|
| chainedMultipleGood->appendSegment(0.25, m_cubicEaseTimingFunction.get());
|
| chainedMultipleGood->appendSegment(0.5, m_cubicCustomTimingFunction.get());
|
| chainedMultipleGood->appendSegment(0.75, m_cubicCustomTimingFunction.get());
|
| chainedMultipleGood->appendSegment(1.0, m_cubicCustomTimingFunction.get());
|
| - EXPECT_TRUE(isCandidateForCompositor(*chainedMultipleGood.get(), m_keyframeVector5));
|
| + EXPECT_TRUE(isCandidateForCompositor(*chainedMultipleGood.get(), &m_keyframeVector5));
|
| }
|
|
|
| TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTimingFunctionChainedCubicNonMatchingOffsets)
|
| {
|
| RefPtr<ChainedTimingFunction> chained0 = ChainedTimingFunction::create();
|
| chained0->appendSegment(0.5, m_cubicEaseTimingFunction.get());
|
| - EXPECT_FALSE(isCandidateForCompositor(*chained0.get(), m_keyframeVector2));
|
| + EXPECT_FALSE(isCandidateForCompositor(*chained0.get(), &m_keyframeVector2));
|
|
|
| RefPtr<ChainedTimingFunction> chained1 = ChainedTimingFunction::create();
|
| chained1->appendSegment(0.24, m_cubicEaseTimingFunction.get());
|
| chained1->appendSegment(0.5, m_cubicEaseTimingFunction.get());
|
| chained1->appendSegment(0.75, m_cubicEaseTimingFunction.get());
|
| chained1->appendSegment(1.0, m_cubicEaseTimingFunction.get());
|
| - EXPECT_FALSE(isCandidateForCompositor(*chained1.get(), m_keyframeVector5));
|
| + EXPECT_FALSE(isCandidateForCompositor(*chained1.get(), &m_keyframeVector5));
|
|
|
| RefPtr<ChainedTimingFunction> chained2 = ChainedTimingFunction::create();
|
| chained2->appendSegment(0.25, m_cubicEaseTimingFunction.get());
|
| chained2->appendSegment(0.51, m_cubicEaseTimingFunction.get());
|
| chained2->appendSegment(0.75, m_cubicEaseTimingFunction.get());
|
| chained2->appendSegment(1.0, m_cubicEaseTimingFunction.get());
|
| - EXPECT_FALSE(isCandidateForCompositor(*chained2.get(), m_keyframeVector5));
|
| + EXPECT_FALSE(isCandidateForCompositor(*chained2.get(), &m_keyframeVector5));
|
|
|
| RefPtr<ChainedTimingFunction> chained3 = ChainedTimingFunction::create();
|
| chained3->appendSegment(0.25, m_cubicEaseTimingFunction.get());
|
| chained3->appendSegment(0.5, m_cubicEaseTimingFunction.get());
|
| chained3->appendSegment(0.75, m_cubicEaseTimingFunction.get());
|
| chained3->appendSegment(0.8, m_cubicEaseTimingFunction.get());
|
| - EXPECT_FALSE(isCandidateForCompositor(*chained3.get(), m_keyframeVector5));
|
| + EXPECT_FALSE(isCandidateForCompositor(*chained3.get(), &m_keyframeVector5));
|
|
|
| RefPtr<ChainedTimingFunction> chained4 = ChainedTimingFunction::create();
|
| chained4->appendSegment(0.25, m_cubicEaseTimingFunction.get());
|
| chained4->appendSegment(0.5, m_cubicEaseTimingFunction.get());
|
| chained4->appendSegment(0.75, m_cubicEaseTimingFunction.get());
|
| chained4->appendSegment(1.1, m_cubicEaseTimingFunction.get());
|
| - EXPECT_FALSE(isCandidateForCompositor(*chained4.get(), m_keyframeVector5));
|
| + EXPECT_FALSE(isCandidateForCompositor(*chained4.get(), &m_keyframeVector5));
|
| }
|
|
|
| TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTimingFunctionMissingFrames)
|
| @@ -457,21 +560,21 @@ TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTimingFunc
|
| chained1->appendSegment(0.5, m_cubicEaseTimingFunction.get());
|
| chained1->appendSegment(0.75, m_cubicEaseTimingFunction.get());
|
| chained1->appendSegment(1.0, m_cubicEaseTimingFunction.get());
|
| - EXPECT_FALSE(isCandidateForCompositor(*chained1.get(), m_keyframeVector5));
|
| + EXPECT_FALSE(isCandidateForCompositor(*chained1.get(), &m_keyframeVector5));
|
|
|
| // Missing middle
|
| RefPtr<ChainedTimingFunction> chained2 = ChainedTimingFunction::create();
|
| chained2->appendSegment(0.25, m_cubicEaseTimingFunction.get());
|
| chained2->appendSegment(0.75, m_cubicEaseTimingFunction.get());
|
| chained2->appendSegment(1.0, m_cubicEaseTimingFunction.get());
|
| - EXPECT_FALSE(isCandidateForCompositor(*chained2.get(), m_keyframeVector5));
|
| + EXPECT_FALSE(isCandidateForCompositor(*chained2.get(), &m_keyframeVector5));
|
|
|
| // Missing last
|
| RefPtr<ChainedTimingFunction> chained3 = ChainedTimingFunction::create();
|
| chained3->appendSegment(0.25, m_cubicEaseTimingFunction.get());
|
| chained3->appendSegment(0.5, m_cubicEaseTimingFunction.get());
|
| chained3->appendSegment(0.75, m_cubicEaseTimingFunction.get());
|
| - EXPECT_FALSE(isCandidateForCompositor(*chained3.get(), m_keyframeVector5));
|
| + EXPECT_FALSE(isCandidateForCompositor(*chained3.get(), &m_keyframeVector5));
|
| }
|
|
|
| TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTimingFunctionToManyFrames)
|
| @@ -479,7 +582,7 @@ TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTimingFunc
|
| RefPtr<ChainedTimingFunction> chained1 = ChainedTimingFunction::create();
|
| chained1->appendSegment(0.1, m_cubicEaseTimingFunction.get());
|
| chained1->appendSegment(0.5, m_cubicEaseTimingFunction.get());
|
| - EXPECT_FALSE(isCandidateForCompositor(*chained1.get(), m_keyframeVector2));
|
| + EXPECT_FALSE(isCandidateForCompositor(*chained1.get(), &m_keyframeVector2));
|
|
|
| RefPtr<ChainedTimingFunction> chained2 = ChainedTimingFunction::create();
|
| chained2->appendSegment(0.1, m_cubicEaseTimingFunction.get());
|
| @@ -487,7 +590,7 @@ TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTimingFunc
|
| chained2->appendSegment(0.5, m_cubicEaseTimingFunction.get());
|
| chained2->appendSegment(0.75, m_cubicEaseTimingFunction.get());
|
| chained2->appendSegment(1.0, m_cubicEaseTimingFunction.get());
|
| - EXPECT_FALSE(isCandidateForCompositor(*chained2.get(), m_keyframeVector5));
|
| + EXPECT_FALSE(isCandidateForCompositor(*chained2.get(), &m_keyframeVector5));
|
| }
|
|
|
| TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTimingFunctionMixedGood)
|
| @@ -497,32 +600,32 @@ TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTimingFunc
|
| chainedMixed->appendSegment(0.5, m_cubicEaseTimingFunction.get());
|
| chainedMixed->appendSegment(0.75, m_cubicEaseTimingFunction.get());
|
| chainedMixed->appendSegment(1.0, m_linearTimingFunction.get());
|
| - EXPECT_TRUE(isCandidateForCompositor(*chainedMixed.get(), m_keyframeVector5));
|
| + EXPECT_TRUE(isCandidateForCompositor(*chainedMixed.get(), &m_keyframeVector5));
|
| }
|
|
|
| TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTimingFunctionWithStepNotOkay)
|
| {
|
| RefPtr<ChainedTimingFunction> chainedStepSingle = ChainedTimingFunction::create();
|
| chainedStepSingle->appendSegment(1.0, m_stepTimingFunction.get());
|
| - EXPECT_FALSE(isCandidateForCompositor(*chainedStepSingle.get(), m_keyframeVector2));
|
| + EXPECT_FALSE(isCandidateForCompositor(*chainedStepSingle.get(), &m_keyframeVector2));
|
|
|
| RefPtr<ChainedTimingFunction> chainedStepMixedA = ChainedTimingFunction::create();
|
| chainedStepMixedA->appendSegment(0.25, m_stepTimingFunction.get());
|
| chainedStepMixedA->appendSegment(0.5, m_linearTimingFunction.get());
|
| chainedStepMixedA->appendSegment(1.0, m_cubicEaseTimingFunction.get());
|
| - EXPECT_FALSE(isCandidateForCompositor(*chainedStepMixedA.get(), m_keyframeVector5));
|
| + EXPECT_FALSE(isCandidateForCompositor(*chainedStepMixedA.get(), &m_keyframeVector5));
|
|
|
| RefPtr<ChainedTimingFunction> chainedStepMixedB = ChainedTimingFunction::create();
|
| chainedStepMixedB->appendSegment(0.25, m_linearTimingFunction.get());
|
| chainedStepMixedB->appendSegment(0.5, m_stepTimingFunction.get());
|
| chainedStepMixedB->appendSegment(1.0, m_cubicEaseTimingFunction.get());
|
| - EXPECT_FALSE(isCandidateForCompositor(*chainedStepMixedB.get(), m_keyframeVector5));
|
| + EXPECT_FALSE(isCandidateForCompositor(*chainedStepMixedB.get(), &m_keyframeVector5));
|
|
|
| RefPtr<ChainedTimingFunction> chainedStepMixedC = ChainedTimingFunction::create();
|
| chainedStepMixedC->appendSegment(0.25, m_linearTimingFunction.get());
|
| chainedStepMixedC->appendSegment(0.5, m_cubicEaseTimingFunction.get());
|
| chainedStepMixedC->appendSegment(1.0, m_stepTimingFunction.get());
|
| - EXPECT_FALSE(isCandidateForCompositor(*chainedStepMixedC.get(), m_keyframeVector5));
|
| + EXPECT_FALSE(isCandidateForCompositor(*chainedStepMixedC.get(), &m_keyframeVector5));
|
| }
|
|
|
| TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTimingFunctionNestedNotOkay)
|
| @@ -535,7 +638,7 @@ TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositorTimingFunc
|
| chainedParent->appendSegment(0.5, chainedChild.get());
|
| chainedParent->appendSegment(0.75, m_linearTimingFunction.get());
|
| chainedParent->appendSegment(1.0, m_linearTimingFunction.get());
|
| - EXPECT_FALSE(isCandidateForCompositor(*chainedParent.get(), m_keyframeVector5));
|
| + EXPECT_FALSE(isCandidateForCompositor(*chainedParent.get(), &m_keyframeVector5));
|
| }
|
|
|
| TEST_F(CoreAnimationCompositorAnimationsTest, isCandidateForCompositor)
|
| @@ -603,6 +706,7 @@ TEST_F(CoreAnimationCompositorAnimationsTest, createSimpleOpacityAnimation)
|
| .WillOnce(Return(mockAnimationPtr));
|
|
|
| usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(1));
|
| + usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(0.0));
|
| usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setAlternatesDirection(false));
|
|
|
| EXPECT_CALL(*mockAnimationPtr, delete_())
|
| @@ -620,7 +724,7 @@ TEST_F(CoreAnimationCompositorAnimationsTest, createSimpleOpacityAnimation)
|
| result[0].clear();
|
| }
|
|
|
| -TEST_F(CoreAnimationCompositorAnimationsTest, createSimpleOpacityAnimationDurationPlaybackOffset)
|
| +TEST_F(CoreAnimationCompositorAnimationsTest, createSimpleOpacityAnimationDuration)
|
| {
|
| // Animation to convert
|
| RefPtr<KeyframeAnimationEffect> effect = createKeyframeAnimationEffect(
|
| @@ -628,8 +732,6 @@ TEST_F(CoreAnimationCompositorAnimationsTest, createSimpleOpacityAnimationDurati
|
| createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0).get(), 1.0));
|
|
|
| m_timing.iterationDuration = 10.0;
|
| - m_timing.playbackRate = 2.0;
|
| - m_timing.startDelay = 200.0;
|
| // --
|
|
|
| WebCompositorSupportMock mockCompositor;
|
| @@ -640,8 +742,8 @@ TEST_F(CoreAnimationCompositorAnimationsTest, createSimpleOpacityAnimationDurati
|
| EXPECT_CALL(mockCompositor, createFloatAnimationCurve())
|
| .WillOnce(Return(mockCurvePtr));
|
|
|
| - usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(100.0, 2.0), blink::WebAnimationCurve::TimingFunctionTypeLinear));
|
| - usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(105.0, 5.0)));
|
| + usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(0.0, 2.0), blink::WebAnimationCurve::TimingFunctionTypeLinear));
|
| + usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(10.0, 5.0)));
|
|
|
| // Create animation
|
| blink::WebAnimationMock* mockAnimationPtr = new blink::WebAnimationMock(blink::WebAnimation::TargetPropertyOpacity);
|
| @@ -651,6 +753,7 @@ TEST_F(CoreAnimationCompositorAnimationsTest, createSimpleOpacityAnimationDurati
|
| .WillOnce(Return(mockAnimationPtr));
|
|
|
| usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(1));
|
| + usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(0.0));
|
| usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setAlternatesDirection(false));
|
|
|
| EXPECT_CALL(*mockAnimationPtr, delete_())
|
| @@ -703,6 +806,7 @@ TEST_F(CoreAnimationCompositorAnimationsTest, createMultipleKeyframeOpacityAnima
|
| .WillOnce(Return(mockAnimationPtr));
|
|
|
| usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(5));
|
| + usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(0.0));
|
| usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setAlternatesDirection(true));
|
|
|
| EXPECT_CALL(*mockAnimationPtr, delete_())
|
| @@ -728,8 +832,8 @@ TEST_F(CoreAnimationCompositorAnimationsTest, createSimpleOpacityAnimationNegati
|
| createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0).get(), 1.0));
|
|
|
| m_timing.iterationCount = 5.0;
|
| - m_timing.iterationDuration = 2.0;
|
| - m_timing.startDelay = -3;
|
| + m_timing.iterationDuration = 1.75;
|
| + m_timing.startDelay = -3.25;
|
| // --
|
|
|
| WebCompositorSupportMock mockCompositor;
|
| @@ -741,7 +845,7 @@ TEST_F(CoreAnimationCompositorAnimationsTest, createSimpleOpacityAnimationNegati
|
| .WillOnce(Return(mockCurvePtr));
|
|
|
| usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(0.0, 2.0), blink::WebAnimationCurve::TimingFunctionTypeLinear));
|
| - usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(2.0, 5.0)));
|
| + usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(1.75, 5.0)));
|
|
|
| // Create animation
|
| blink::WebAnimationMock* mockAnimationPtr = new blink::WebAnimationMock(blink::WebAnimation::TargetPropertyOpacity);
|
| @@ -750,8 +854,8 @@ TEST_F(CoreAnimationCompositorAnimationsTest, createSimpleOpacityAnimationNegati
|
| usesMockCurve += EXPECT_CALL(mockCompositor, createAnimation(Ref(*mockCurvePtr), blink::WebAnimation::TargetPropertyOpacity, _))
|
| .WillOnce(Return(mockAnimationPtr));
|
|
|
| - usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(-1.0));
|
| usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(4));
|
| + usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(-1.5));
|
| usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setAlternatesDirection(false));
|
|
|
| EXPECT_CALL(*mockAnimationPtr, delete_())
|
| @@ -810,6 +914,7 @@ TEST_F(CoreAnimationCompositorAnimationsTest, createMultipleKeyframeOpacityAnima
|
| .WillOnce(Return(mockAnimationPtr));
|
|
|
| usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(10));
|
| + usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(0.0));
|
| usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setAlternatesDirection(true));
|
|
|
| EXPECT_CALL(*mockAnimationPtr, delete_())
|
| @@ -869,6 +974,7 @@ TEST_F(CoreAnimationCompositorAnimationsTest, createReversedOpacityAnimation)
|
| .WillOnce(Return(mockAnimationPtr));
|
|
|
| usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(10));
|
| + usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(0.0));
|
| usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setAlternatesDirection(true));
|
|
|
| EXPECT_CALL(*mockAnimationPtr, delete_())
|
| @@ -886,17 +992,17 @@ TEST_F(CoreAnimationCompositorAnimationsTest, createReversedOpacityAnimation)
|
| result[0].clear();
|
| }
|
|
|
| -TEST_F(CoreAnimationCompositorAnimationsTest, createReversedOpacityAnimationDurationPlaybackOffset)
|
| +TEST_F(CoreAnimationCompositorAnimationsTest, createReversedOpacityAnimationNegativeStartDelay)
|
| {
|
| // Animation to convert
|
| RefPtr<KeyframeAnimationEffect> effect = createKeyframeAnimationEffect(
|
| createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(2.0).get(), 0),
|
| createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0).get(), 1.0));
|
|
|
| - m_timing.iterationDuration = 10.0;
|
| - m_timing.playbackRate = 2.0;
|
| - m_timing.startDelay = 200.0;
|
| - m_timing.direction = Timing::PlaybackDirectionReverse;
|
| + m_timing.iterationCount = 5.0;
|
| + m_timing.iterationDuration = 2.0;
|
| + m_timing.startDelay = -3;
|
| + m_timing.direction = Timing::PlaybackDirectionAlternateReverse;
|
| // --
|
|
|
| WebCompositorSupportMock mockCompositor;
|
| @@ -907,8 +1013,8 @@ TEST_F(CoreAnimationCompositorAnimationsTest, createReversedOpacityAnimationDura
|
| EXPECT_CALL(mockCompositor, createFloatAnimationCurve())
|
| .WillOnce(Return(mockCurvePtr));
|
|
|
| - usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(100.0, 5.0), blink::WebAnimationCurve::TimingFunctionTypeLinear));
|
| - usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(105.0, 2.0)));
|
| + usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(0.0, 2.0), blink::WebAnimationCurve::TimingFunctionTypeLinear));
|
| + usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(2.0, 5.0)));
|
|
|
| // Create animation
|
| blink::WebAnimationMock* mockAnimationPtr = new blink::WebAnimationMock(blink::WebAnimation::TargetPropertyOpacity);
|
| @@ -917,8 +1023,9 @@ TEST_F(CoreAnimationCompositorAnimationsTest, createReversedOpacityAnimationDura
|
| usesMockCurve += EXPECT_CALL(mockCompositor, createAnimation(Ref(*mockCurvePtr), blink::WebAnimation::TargetPropertyOpacity, _))
|
| .WillOnce(Return(mockAnimationPtr));
|
|
|
| - usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(1));
|
| - usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setAlternatesDirection(false));
|
| + usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(4));
|
| + usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(-1.0));
|
| + usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setAlternatesDirection(true));
|
|
|
| EXPECT_CALL(*mockAnimationPtr, delete_())
|
| .Times(1)
|
| @@ -935,4 +1042,5 @@ TEST_F(CoreAnimationCompositorAnimationsTest, createReversedOpacityAnimationDura
|
| result[0].clear();
|
| }
|
|
|
| +
|
| } // namespace WebCore
|
|
|