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

Side by Side Diff: third_party/WebKit/Source/core/animation/CompositorAnimationsTest.cpp

Issue 2019613002: Blink Compositor Animation: Make Animation and Curve methods non-virtual. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix codereview issues. Add cc::TimingFunction::Type enum. Created 4 years, 6 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
OLDNEW
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 16 matching lines...) Expand all
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30 30
31 31
32 #include "core/animation/CompositorAnimations.h" 32 #include "core/animation/CompositorAnimations.h"
33 33
34 #include "core/animation/Animation.h" 34 #include "core/animation/Animation.h"
35 #include "core/animation/AnimationTimeline.h" 35 #include "core/animation/AnimationTimeline.h"
36 #include "core/animation/CompositorAnimationsImpl.h" 36 #include "core/animation/CompositorAnimationsImpl.h"
37 #include "core/animation/CompositorAnimationsTestHelper.h"
38 #include "core/animation/CompositorPendingAnimations.h" 37 #include "core/animation/CompositorPendingAnimations.h"
39 #include "core/animation/ElementAnimations.h" 38 #include "core/animation/ElementAnimations.h"
40 #include "core/animation/KeyframeEffect.h" 39 #include "core/animation/KeyframeEffect.h"
41 #include "core/animation/animatable/AnimatableDouble.h" 40 #include "core/animation/animatable/AnimatableDouble.h"
42 #include "core/animation/animatable/AnimatableFilterOperations.h" 41 #include "core/animation/animatable/AnimatableFilterOperations.h"
43 #include "core/animation/animatable/AnimatableTransform.h" 42 #include "core/animation/animatable/AnimatableTransform.h"
44 #include "core/animation/animatable/AnimatableValueTestHelper.h" 43 #include "core/animation/animatable/AnimatableValueTestHelper.h"
45 #include "core/dom/Document.h" 44 #include "core/dom/Document.h"
46 #include "core/layout/LayoutObject.h" 45 #include "core/layout/LayoutObject.h"
47 #include "core/testing/DummyPageHolder.h" 46 #include "core/testing/DummyPageHolder.h"
48 #include "platform/animation/CompositorAnimation.h" 47 #include "platform/animation/CompositorAnimation.h"
48 #include "platform/animation/CompositorFloatAnimationCurve.h"
49 #include "platform/animation/CompositorFloatKeyframe.h"
49 #include "platform/geometry/FloatBox.h" 50 #include "platform/geometry/FloatBox.h"
50 #include "platform/geometry/IntSize.h" 51 #include "platform/geometry/IntSize.h"
51 #include "platform/graphics/filters/FilterOperations.h" 52 #include "platform/graphics/filters/FilterOperations.h"
52 #include "platform/transforms/TransformOperations.h" 53 #include "platform/transforms/TransformOperations.h"
53 #include "platform/transforms/TranslateTransformOperation.h" 54 #include "platform/transforms/TranslateTransformOperation.h"
54 #include "testing/gmock/include/gmock/gmock.h"
55 #include "testing/gtest/include/gtest/gtest.h" 55 #include "testing/gtest/include/gtest/gtest.h"
56 #include "wtf/HashFunctions.h" 56 #include "wtf/HashFunctions.h"
57 #include "wtf/OwnPtr.h" 57 #include "wtf/OwnPtr.h"
58 #include "wtf/PassOwnPtr.h" 58 #include "wtf/PassOwnPtr.h"
59 #include "wtf/PassRefPtr.h" 59 #include "wtf/PassRefPtr.h"
60 #include "wtf/RefPtr.h" 60 #include "wtf/RefPtr.h"
61 61
62 namespace blink { 62 namespace blink {
63 63
64 using ::testing::ExpectationSet; 64 class AnimationCompositorAnimationsTest : public ::testing::Test {
65 using ::testing::Ref;
66 using ::testing::Return;
67 using ::testing::_;
68
69 class AnimationCompositorAnimationsTest : public AnimationCompositorAnimationsTe stBase {
70 protected: 65 protected:
71 RefPtr<TimingFunction> m_linearTimingFunction; 66 RefPtr<TimingFunction> m_linearTimingFunction;
72 RefPtr<TimingFunction> m_cubicEaseTimingFunction; 67 RefPtr<TimingFunction> m_cubicEaseTimingFunction;
73 RefPtr<TimingFunction> m_cubicCustomTimingFunction; 68 RefPtr<TimingFunction> m_cubicCustomTimingFunction;
74 RefPtr<TimingFunction> m_stepTimingFunction; 69 RefPtr<TimingFunction> m_stepTimingFunction;
75 70
76 Timing m_timing; 71 Timing m_timing;
77 CompositorAnimationsImpl::CompositorTiming m_compositorTiming; 72 CompositorAnimationsImpl::CompositorTiming m_compositorTiming;
78 OwnPtr<AnimatableValueKeyframeVector> m_keyframeVector2; 73 OwnPtr<AnimatableValueKeyframeVector> m_keyframeVector2;
79 Persistent<AnimatableValueKeyframeEffectModel> m_keyframeAnimationEffect2; 74 Persistent<AnimatableValueKeyframeEffectModel> m_keyframeAnimationEffect2;
80 OwnPtr<AnimatableValueKeyframeVector> m_keyframeVector5; 75 OwnPtr<AnimatableValueKeyframeVector> m_keyframeVector5;
81 Persistent<AnimatableValueKeyframeEffectModel> m_keyframeAnimationEffect5; 76 Persistent<AnimatableValueKeyframeEffectModel> m_keyframeAnimationEffect5;
82 77
83 Persistent<Document> m_document; 78 Persistent<Document> m_document;
84 Persistent<Element> m_element; 79 Persistent<Element> m_element;
85 Persistent<AnimationTimeline> m_timeline; 80 Persistent<AnimationTimeline> m_timeline;
86 OwnPtr<DummyPageHolder> m_pageHolder; 81 OwnPtr<DummyPageHolder> m_pageHolder;
87 CompositorFactoryMock* m_mockCompositorFactory;
88 82
89 void SetUp() override 83 void SetUp() override
90 { 84 {
91 AnimationCompositorAnimationsTestBase::SetUp();
92
93 m_mockCompositorFactory = new CompositorFactoryMock();
94 CompositorFactory::initializeForTesting(adoptPtr(m_mockCompositorFactory ));
95
96 m_linearTimingFunction = LinearTimingFunction::shared(); 85 m_linearTimingFunction = LinearTimingFunction::shared();
97 m_cubicEaseTimingFunction = CubicBezierTimingFunction::preset(CubicBezie rTimingFunction::EaseType::EASE); 86 m_cubicEaseTimingFunction = CubicBezierTimingFunction::preset(CubicBezie rTimingFunction::EaseType::EASE);
98 m_cubicCustomTimingFunction = CubicBezierTimingFunction::create(1, 2, 3, 4); 87 m_cubicCustomTimingFunction = CubicBezierTimingFunction::create(1, 2, 3, 4);
99 m_stepTimingFunction = StepsTimingFunction::create(1, StepsTimingFunctio n::StepPosition::END); 88 m_stepTimingFunction = StepsTimingFunction::create(1, StepsTimingFunctio n::StepPosition::END);
100 89
101 m_timing = createCompositableTiming(); 90 m_timing = createCompositableTiming();
102 m_compositorTiming = CompositorAnimationsImpl::CompositorTiming(); 91 m_compositorTiming = CompositorAnimationsImpl::CompositorTiming();
103 // Make sure the CompositableTiming is really compositable, otherwise 92 // Make sure the CompositableTiming is really compositable, otherwise
104 // most other tests will fail. 93 // most other tests will fail.
105 ASSERT(convertTimingForCompositor(m_timing, m_compositorTiming)); 94 ASSERT(convertTimingForCompositor(m_timing, m_compositorTiming));
106 95
107 m_keyframeVector2 = createCompositableFloatKeyframeVector(2); 96 m_keyframeVector2 = createCompositableFloatKeyframeVector(2);
108 m_keyframeAnimationEffect2 = AnimatableValueKeyframeEffectModel::create( *m_keyframeVector2); 97 m_keyframeAnimationEffect2 = AnimatableValueKeyframeEffectModel::create( *m_keyframeVector2);
109 98
110 m_keyframeVector5 = createCompositableFloatKeyframeVector(5); 99 m_keyframeVector5 = createCompositableFloatKeyframeVector(5);
111 m_keyframeAnimationEffect5 = AnimatableValueKeyframeEffectModel::create( *m_keyframeVector5); 100 m_keyframeAnimationEffect5 = AnimatableValueKeyframeEffectModel::create( *m_keyframeVector5);
112 101
113 EXPECT_CALL(*m_mockCompositorFactory, createAnimationTimeline())
114 .WillOnce(Return(new WebCompositorAnimationTimelineMock()));
115
116 m_pageHolder = DummyPageHolder::create(); 102 m_pageHolder = DummyPageHolder::create();
117 m_document = &m_pageHolder->document(); 103 m_document = &m_pageHolder->document();
118 m_document->animationClock().resetTimeForTesting(); 104 m_document->animationClock().resetTimeForTesting();
119 105
120 EXPECT_CALL(*m_mockCompositorFactory, createAnimationTimeline())
121 .WillOnce(Return(new WebCompositorAnimationTimelineMock()));
122
123 m_timeline = AnimationTimeline::create(m_document.get()); 106 m_timeline = AnimationTimeline::create(m_document.get());
124 m_timeline->resetForTesting(); 107 m_timeline->resetForTesting();
125 m_element = m_document->createElement("test", ASSERT_NO_EXCEPTION); 108 m_element = m_document->createElement("test", ASSERT_NO_EXCEPTION);
126 } 109 }
127 110
128 void TearDown() override
129 {
130 m_mockCompositorFactory = nullptr;
131 CompositorFactory::shutdown();
132 }
133
134 public: 111 public:
135 bool convertTimingForCompositor(const Timing& t, CompositorAnimationsImpl::C ompositorTiming& out) 112 bool convertTimingForCompositor(const Timing& t, CompositorAnimationsImpl::C ompositorTiming& out)
136 { 113 {
137 return CompositorAnimationsImpl::convertTimingForCompositor(t, 0, out, 1 ); 114 return CompositorAnimationsImpl::convertTimingForCompositor(t, 0, out, 1 );
138 } 115 }
139 bool isCandidateForAnimationOnCompositor(const Timing& timing, const EffectM odel& effect) 116 bool isCandidateForAnimationOnCompositor(const Timing& timing, const EffectM odel& effect)
140 { 117 {
141 return CompositorAnimations::instance()->isCandidateForAnimationOnCompos itor(timing, *m_element.get(), nullptr, effect, 1); 118 return CompositorAnimations::instance()->isCandidateForAnimationOnCompos itor(timing, *m_element.get(), nullptr, effect, 1);
142 } 119 }
143 void getAnimationOnCompositor(Timing& timing, AnimatableValueKeyframeEffectM odel& effect, Vector<OwnPtr<CompositorAnimation>>& animations) 120 void getAnimationOnCompositor(Timing& timing, AnimatableValueKeyframeEffectM odel& effect, Vector<OwnPtr<CompositorAnimation>>& animations)
144 { 121 {
145 return getAnimationOnCompositor(timing, effect, animations, 1); 122 getAnimationOnCompositor(timing, effect, animations, 1);
146 } 123 }
147 void getAnimationOnCompositor(Timing& timing, AnimatableValueKeyframeEffectM odel& effect, Vector<OwnPtr<CompositorAnimation>>& animations, double playerPlay backRate) 124 void getAnimationOnCompositor(Timing& timing, AnimatableValueKeyframeEffectM odel& effect, Vector<OwnPtr<CompositorAnimation>>& animations, double playerPlay backRate)
148 { 125 {
149 return CompositorAnimationsImpl::getAnimationOnCompositor(timing, 0, std ::numeric_limits<double>::quiet_NaN(), 0, effect, animations, playerPlaybackRate ); 126 CompositorAnimationsImpl::getAnimationOnCompositor(timing, 0, std::numer ic_limits<double>::quiet_NaN(), 0, effect, animations, playerPlaybackRate);
150 } 127 }
151 bool getAnimationBounds(FloatBox& boundingBox, const EffectModel& effect, do uble minValue, double maxValue) 128 bool getAnimationBounds(FloatBox& boundingBox, const EffectModel& effect, do uble minValue, double maxValue)
152 { 129 {
153 return CompositorAnimations::instance()->getAnimatedBoundingBox(bounding Box, effect, minValue, maxValue); 130 return CompositorAnimations::instance()->getAnimatedBoundingBox(bounding Box, effect, minValue, maxValue);
154 } 131 }
155 132
156 bool duplicateSingleKeyframeAndTestIsCandidateOnResult(AnimatableValueKeyfra me* frame) 133 bool duplicateSingleKeyframeAndTestIsCandidateOnResult(AnimatableValueKeyfra me* frame)
157 { 134 {
158 EXPECT_EQ(frame->offset(), 0); 135 EXPECT_EQ(frame->offset(), 0);
159 AnimatableValueKeyframeVector frames; 136 AnimatableValueKeyframeVector frames;
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
263 } 240 }
264 return nullptr; 241 return nullptr;
265 } 242 }
266 243
267 void simulateFrame(double time) 244 void simulateFrame(double time)
268 { 245 {
269 m_document->animationClock().updateTime(time); 246 m_document->animationClock().updateTime(time);
270 m_document->compositorPendingAnimations().update(false); 247 m_document->compositorPendingAnimations().update(false);
271 m_timeline->serviceAnimations(TimingUpdateForAnimationFrame); 248 m_timeline->serviceAnimations(TimingUpdateForAnimationFrame);
272 } 249 }
250
251 PassOwnPtr<CompositorAnimation> convertToCompositorAnimation(AnimatableValue KeyframeEffectModel& effect, double playerPlaybackRate)
252 {
253 Vector<OwnPtr<CompositorAnimation>> result;
254 getAnimationOnCompositor(m_timing, effect, result, playerPlaybackRate);
255 DCHECK_EQ(1U, result.size());
256 return std::move(result[0]);
257 }
258
259 PassOwnPtr<CompositorAnimation> convertToCompositorAnimation(AnimatableValue KeyframeEffectModel& effect)
260 {
261 return convertToCompositorAnimation(effect, 1.0);
262 }
273 }; 263 };
274 264
275 class LayoutObjectProxy : public LayoutObject { 265 class LayoutObjectProxy : public LayoutObject {
276 public: 266 public:
277 static LayoutObjectProxy* create(Node* node) 267 static LayoutObjectProxy* create(Node* node)
278 { 268 {
279 return new LayoutObjectProxy(node); 269 return new LayoutObjectProxy(node);
280 } 270 }
281 271
282 static void dispose(LayoutObjectProxy* proxy) 272 static void dispose(LayoutObjectProxy* proxy)
(...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after
649 639
650 // ----------------------------------------------------------------------- 640 // -----------------------------------------------------------------------
651 // ----------------------------------------------------------------------- 641 // -----------------------------------------------------------------------
652 642
653 TEST_F(AnimationCompositorAnimationsTest, createSimpleOpacityAnimation) 643 TEST_F(AnimationCompositorAnimationsTest, createSimpleOpacityAnimation)
654 { 644 {
655 // KeyframeEffect to convert 645 // KeyframeEffect to convert
656 AnimatableValueKeyframeEffectModel* effect = createKeyframeEffectModel( 646 AnimatableValueKeyframeEffectModel* effect = createKeyframeEffectModel(
657 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(2.0 ).get(), 0), 647 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(2.0 ).get(), 0),
658 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0 ).get(), 1.0)); 648 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0 ).get(), 1.0));
659 // --
660 649
661 // Curve is created 650 OwnPtr<CompositorAnimation> animation = convertToCompositorAnimation(*effect );
662 WebFloatAnimationCurveMock* mockCurvePtr = new WebFloatAnimationCurveMock; 651 EXPECT_EQ(CompositorTargetProperty::OPACITY, animation->targetProperty());
663 ExpectationSet usesMockCurve; 652 EXPECT_EQ(1.0, animation->iterations());
664 EXPECT_CALL(*m_mockCompositorFactory, createFloatAnimationCurve()) 653 EXPECT_EQ(0, animation->timeOffset());
665 .WillOnce(Return(mockCurvePtr)); 654 EXPECT_EQ(CompositorAnimation::Direction::NORMAL, animation->getDirection()) ;
655 EXPECT_EQ(1.0, animation->playbackRate());
666 656
667 usesMockCurve += EXPECT_CALL(*mockCurvePtr, addLinearKeyframe(CompositorFloa tKeyframe(0.0, 2.0))); 657 OwnPtr<CompositorFloatAnimationCurve> keyframedFloatCurve = animation->float CurveForTesting();
668 usesMockCurve += EXPECT_CALL(*mockCurvePtr, addCubicBezierKeyframe(Composito rFloatKeyframe(1.0, 5.0), CubicBezierTimingFunction::EaseType::EASE));
669 658
670 // Create animation 659 Vector<CompositorFloatKeyframe> keyframes = keyframedFloatCurve->keyframesFo rTesting();
671 WebCompositorAnimationMock* mockAnimationPtr = new WebCompositorAnimationMoc k(CompositorTargetProperty::OPACITY); 660 ASSERT_EQ(2UL, keyframes.size());
672 ExpectationSet usesMockAnimation;
673 661
674 usesMockCurve += EXPECT_CALL(*m_mockCompositorFactory, createAnimation(Ref(* mockCurvePtr), CompositorTargetProperty::OPACITY, _, _)) 662 EXPECT_EQ(0, keyframes[0].time);
675 .WillOnce(Return(mockAnimationPtr)); 663 EXPECT_EQ(2.0f, keyframes[0].value);
664 EXPECT_TRUE(keyframedFloatCurve->keyframeHasLinearTimingFunctionForTesting(0 ));
676 665
677 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(1)); 666 EXPECT_EQ(1.0, keyframes[1].time);
678 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(0.0)); 667 EXPECT_EQ(5.0f, keyframes[1].value);
679 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setDirection(CompositorA nimation::Direction::NORMAL)); 668 EXPECT_EQ(CubicBezierTimingFunction::EaseType::EASE, keyframedFloatCurve->ge tKeyframeEaseTypeForTesting(1));
680 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setPlaybackRate(1));
681
682 EXPECT_CALL(*mockAnimationPtr, delete_())
683 .Times(1)
684 .After(usesMockAnimation);
685 EXPECT_CALL(*mockCurvePtr, delete_())
686 .Times(1)
687 .After(usesMockCurve);
688
689 // Go!
690 Vector<OwnPtr<CompositorAnimation>> result;
691 getAnimationOnCompositor(m_timing, *effect, result);
692 EXPECT_EQ(1U, result.size());
693 result[0].reset();
694 } 669 }
695 670
696 TEST_F(AnimationCompositorAnimationsTest, createSimpleOpacityAnimationDuration) 671 TEST_F(AnimationCompositorAnimationsTest, createSimpleOpacityAnimationDuration)
697 { 672 {
698 // KeyframeEffect to convert 673 // KeyframeEffect to convert
699 AnimatableValueKeyframeEffectModel* effect = createKeyframeEffectModel( 674 AnimatableValueKeyframeEffectModel* effect = createKeyframeEffectModel(
700 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(2.0 ).get(), 0), 675 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(2.0 ).get(), 0),
701 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0 ).get(), 1.0)); 676 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0 ).get(), 1.0));
702 677
703 m_timing.iterationDuration = 10.0; 678 const double duration = 10.0;
704 // -- 679 m_timing.iterationDuration = duration;
705 680
706 // Curve is created 681 OwnPtr<CompositorAnimation> animation = convertToCompositorAnimation(*effect );
707 WebFloatAnimationCurveMock* mockCurvePtr = new WebFloatAnimationCurveMock; 682 OwnPtr<CompositorFloatAnimationCurve> keyframedFloatCurve = animation->float CurveForTesting();
708 ExpectationSet usesMockCurve;
709 EXPECT_CALL(*m_mockCompositorFactory, createFloatAnimationCurve())
710 .WillOnce(Return(mockCurvePtr));
711 683
712 usesMockCurve += EXPECT_CALL(*mockCurvePtr, addLinearKeyframe(CompositorFloa tKeyframe(0.0, 2.0))); 684 Vector<CompositorFloatKeyframe> keyframes = keyframedFloatCurve->keyframesFo rTesting();
713 usesMockCurve += EXPECT_CALL(*mockCurvePtr, addCubicBezierKeyframe(Composito rFloatKeyframe(10.0, 5.0), CubicBezierTimingFunction::EaseType::EASE)); 685 ASSERT_EQ(2UL, keyframes.size());
714 686
715 // Create animation 687 EXPECT_EQ(duration, keyframes[1].time);
716 WebCompositorAnimationMock* mockAnimationPtr = new WebCompositorAnimationMoc k(CompositorTargetProperty::OPACITY);
717 ExpectationSet usesMockAnimation;
718
719 usesMockCurve += EXPECT_CALL(*m_mockCompositorFactory, createAnimation(Ref(* mockCurvePtr), CompositorTargetProperty::OPACITY, _, _))
720 .WillOnce(Return(mockAnimationPtr));
721
722 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(1));
723 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(0.0));
724 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setDirection(CompositorA nimation::Direction::NORMAL));
725 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setPlaybackRate(1));
726
727 EXPECT_CALL(*mockAnimationPtr, delete_())
728 .Times(1)
729 .After(usesMockAnimation);
730 EXPECT_CALL(*mockCurvePtr, delete_())
731 .Times(1)
732 .After(usesMockCurve);
733
734 // Go!
735 Vector<OwnPtr<CompositorAnimation>> result;
736 getAnimationOnCompositor(m_timing, *effect, result);
737 EXPECT_EQ(1U, result.size());
738 result[0].reset();
739 } 688 }
740 689
741 TEST_F(AnimationCompositorAnimationsTest, createMultipleKeyframeOpacityAnimation Linear) 690 TEST_F(AnimationCompositorAnimationsTest, createMultipleKeyframeOpacityAnimation Linear)
742 { 691 {
743 // KeyframeEffect to convert 692 // KeyframeEffect to convert
744 AnimatableValueKeyframeEffectModel* effect = createKeyframeEffectModel( 693 AnimatableValueKeyframeEffectModel* effect = createKeyframeEffectModel(
745 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(2.0 ).get(), 0), 694 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(2.0 ).get(), 0),
746 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(-1. 0).get(), 0.25), 695 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(-1. 0).get(), 0.25),
747 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(20. 0).get(), 0.5), 696 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(20. 0).get(), 0.5),
748 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0 ).get(), 1.0)); 697 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0 ).get(), 1.0));
749 698
750 m_timing.iterationCount = 5; 699 m_timing.iterationCount = 5;
751 m_timing.direction = Timing::PlaybackDirectionAlternate; 700 m_timing.direction = Timing::PlaybackDirectionAlternate;
752 m_timing.playbackRate = 2.0; 701 m_timing.playbackRate = 2.0;
753 // --
754 702
755 // Curve is created 703 OwnPtr<CompositorAnimation> animation = convertToCompositorAnimation(*effect );
756 WebFloatAnimationCurveMock* mockCurvePtr = new WebFloatAnimationCurveMock(); 704 EXPECT_EQ(CompositorTargetProperty::OPACITY, animation->targetProperty());
757 ExpectationSet usesMockCurve; 705 EXPECT_EQ(5.0, animation->iterations());
706 EXPECT_EQ(0, animation->timeOffset());
707 EXPECT_EQ(CompositorAnimation::Direction::ALTERNATE_NORMAL, animation->getDi rection());
708 EXPECT_EQ(2.0, animation->playbackRate());
758 709
759 EXPECT_CALL(*m_mockCompositorFactory, createFloatAnimationCurve()) 710 OwnPtr<CompositorFloatAnimationCurve> keyframedFloatCurve = animation->float CurveForTesting();
760 .WillOnce(Return(mockCurvePtr));
761 711
762 usesMockCurve += EXPECT_CALL(*mockCurvePtr, addLinearKeyframe(CompositorFloa tKeyframe(0.0, 2.0))); 712 Vector<CompositorFloatKeyframe> keyframes = keyframedFloatCurve->keyframesFo rTesting();
763 usesMockCurve += EXPECT_CALL(*mockCurvePtr, addLinearKeyframe(CompositorFloa tKeyframe(0.25, -1.0))); 713 ASSERT_EQ(4UL, keyframes.size());
764 usesMockCurve += EXPECT_CALL(*mockCurvePtr, addLinearKeyframe(CompositorFloa tKeyframe(0.5, 20.0)));
765 usesMockCurve += EXPECT_CALL(*mockCurvePtr, addCubicBezierKeyframe(Composito rFloatKeyframe(1.0, 5.0), CubicBezierTimingFunction::EaseType::EASE));
766 714
767 // KeyframeEffect is created 715 EXPECT_EQ(0, keyframes[0].time);
768 WebCompositorAnimationMock* mockAnimationPtr = new WebCompositorAnimationMoc k(CompositorTargetProperty::OPACITY); 716 EXPECT_EQ(2.0f, keyframes[0].value);
769 ExpectationSet usesMockAnimation; 717 EXPECT_TRUE(keyframedFloatCurve->keyframeHasLinearTimingFunctionForTesting(0 ));
770 718
771 usesMockCurve += EXPECT_CALL(*m_mockCompositorFactory, createAnimation(Ref(* mockCurvePtr), CompositorTargetProperty::OPACITY, _, _)) 719 EXPECT_EQ(0.25, keyframes[1].time);
772 .WillOnce(Return(mockAnimationPtr)); 720 EXPECT_EQ(-1.0f, keyframes[1].value);
721 EXPECT_TRUE(keyframedFloatCurve->keyframeHasLinearTimingFunctionForTesting(1 ));
773 722
774 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(5)); 723 EXPECT_EQ(0.5, keyframes[2].time);
775 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(0.0)); 724 EXPECT_EQ(20.0f, keyframes[2].value);
776 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setDirection(CompositorA nimation::Direction::ALTERNATE_NORMAL)); 725 EXPECT_TRUE(keyframedFloatCurve->keyframeHasLinearTimingFunctionForTesting(2 ));
777 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setPlaybackRate(2.0));
778 726
779 EXPECT_CALL(*mockAnimationPtr, delete_()) 727 EXPECT_EQ(1.0, keyframes[3].time);
780 .Times(1) 728 EXPECT_EQ(5.0f, keyframes[3].value);
781 .After(usesMockAnimation); 729 EXPECT_EQ(CubicBezierTimingFunction::EaseType::EASE, keyframedFloatCurve->ge tKeyframeEaseTypeForTesting(3));
782 EXPECT_CALL(*mockCurvePtr, delete_())
783 .Times(1)
784 .After(usesMockCurve);
785
786 // Go!
787 Vector<OwnPtr<CompositorAnimation>> result;
788 getAnimationOnCompositor(m_timing, *effect, result);
789 EXPECT_EQ(1U, result.size());
790 result[0].reset();
791 } 730 }
792 731
793 TEST_F(AnimationCompositorAnimationsTest, createSimpleOpacityAnimationStartDelay ) 732 TEST_F(AnimationCompositorAnimationsTest, createSimpleOpacityAnimationStartDelay )
794 { 733 {
795 // KeyframeEffect to convert 734 // KeyframeEffect to convert
796 AnimatableValueKeyframeEffectModel* effect = createKeyframeEffectModel( 735 AnimatableValueKeyframeEffectModel* effect = createKeyframeEffectModel(
797 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(2.0 ).get(), 0), 736 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(2.0 ).get(), 0),
798 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0 ).get(), 1.0)); 737 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0 ).get(), 1.0));
799 738
739 const double startDelay = 3.25;
740
800 m_timing.iterationCount = 5.0; 741 m_timing.iterationCount = 5.0;
801 m_timing.iterationDuration = 1.75; 742 m_timing.iterationDuration = 1.75;
802 m_timing.startDelay = 3.25; 743 m_timing.startDelay = startDelay;
803 // --
804 744
805 // Curve is created 745 OwnPtr<CompositorAnimation> animation = convertToCompositorAnimation(*effect );
806 WebFloatAnimationCurveMock* mockCurvePtr = new WebFloatAnimationCurveMock;
807 ExpectationSet usesMockCurve;
808 EXPECT_CALL(*m_mockCompositorFactory, createFloatAnimationCurve())
809 .WillOnce(Return(mockCurvePtr));
810 746
811 usesMockCurve += EXPECT_CALL(*mockCurvePtr, addLinearKeyframe(CompositorFloa tKeyframe(0.0, 2.0))); 747 EXPECT_EQ(CompositorTargetProperty::OPACITY, animation->targetProperty());
812 usesMockCurve += EXPECT_CALL(*mockCurvePtr, addCubicBezierKeyframe(Composito rFloatKeyframe(1.75, 5.0), CubicBezierTimingFunction::EaseType::EASE)); 748 EXPECT_EQ(5.0, animation->iterations());
749 EXPECT_EQ(-startDelay, animation->timeOffset());
813 750
814 // Create animation 751 OwnPtr<CompositorFloatAnimationCurve> keyframedFloatCurve = animation->float CurveForTesting();
815 WebCompositorAnimationMock* mockAnimationPtr = new WebCompositorAnimationMoc k(CompositorTargetProperty::OPACITY);
816 ExpectationSet usesMockAnimation;
817 752
818 usesMockCurve += EXPECT_CALL(*m_mockCompositorFactory, createAnimation(Ref(* mockCurvePtr), CompositorTargetProperty::OPACITY, _, _)) 753 Vector<CompositorFloatKeyframe> keyframes = keyframedFloatCurve->keyframesFo rTesting();
819 .WillOnce(Return(mockAnimationPtr)); 754 ASSERT_EQ(2UL, keyframes.size());
820 755
821 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(5)); 756 EXPECT_EQ(1.75, keyframes[1].time);
822 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(-3.25)); 757 EXPECT_EQ(5.0f, keyframes[1].value);
823 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setDirection(CompositorA nimation::Direction::NORMAL));
824 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setPlaybackRate(1));
825
826 EXPECT_CALL(*mockAnimationPtr, delete_())
827 .Times(1)
828 .After(usesMockAnimation);
829 EXPECT_CALL(*mockCurvePtr, delete_())
830 .Times(1)
831 .After(usesMockCurve);
832
833 // Go!
834 Vector<OwnPtr<CompositorAnimation>> result;
835 getAnimationOnCompositor(m_timing, *effect, result);
836 EXPECT_EQ(1U, result.size());
837 result[0].reset();
838 } 758 }
839 759
840 TEST_F(AnimationCompositorAnimationsTest, createMultipleKeyframeOpacityAnimation Chained) 760 TEST_F(AnimationCompositorAnimationsTest, createMultipleKeyframeOpacityAnimation Chained)
841 { 761 {
842 // KeyframeEffect to convert 762 // KeyframeEffect to convert
843 AnimatableValueKeyframeVector frames; 763 AnimatableValueKeyframeVector frames;
844 frames.append(createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble:: create(2.0).get(), 0)); 764 frames.append(createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble:: create(2.0).get(), 0));
845 frames.append(createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble:: create(-1.0).get(), 0.25)); 765 frames.append(createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble:: create(-1.0).get(), 0.25));
846 frames.append(createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble:: create(20.0).get(), 0.5)); 766 frames.append(createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble:: create(20.0).get(), 0.5));
847 frames.append(createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble:: create(5.0).get(), 1.0)); 767 frames.append(createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble:: create(5.0).get(), 1.0));
848 frames[0]->setEasing(m_cubicEaseTimingFunction.get()); 768 frames[0]->setEasing(m_cubicEaseTimingFunction.get());
849 frames[1]->setEasing(m_linearTimingFunction.get()); 769 frames[1]->setEasing(m_linearTimingFunction.get());
850 frames[2]->setEasing(m_cubicCustomTimingFunction.get()); 770 frames[2]->setEasing(m_cubicCustomTimingFunction.get());
851 AnimatableValueKeyframeEffectModel* effect = AnimatableValueKeyframeEffectMo del::create(frames); 771 AnimatableValueKeyframeEffectModel* effect = AnimatableValueKeyframeEffectMo del::create(frames);
852 772
853 m_timing.timingFunction = m_linearTimingFunction.get(); 773 m_timing.timingFunction = m_linearTimingFunction.get();
854 m_timing.iterationDuration = 2.0; 774 m_timing.iterationDuration = 2.0;
855 m_timing.iterationCount = 10; 775 m_timing.iterationCount = 10;
856 m_timing.direction = Timing::PlaybackDirectionAlternate; 776 m_timing.direction = Timing::PlaybackDirectionAlternate;
857 // --
858 777
859 // Curve is created 778 OwnPtr<CompositorAnimation> animation = convertToCompositorAnimation(*effect );
860 WebFloatAnimationCurveMock* mockCurvePtr = new WebFloatAnimationCurveMock(); 779 EXPECT_EQ(CompositorTargetProperty::OPACITY, animation->targetProperty());
861 ExpectationSet usesMockCurve; 780 EXPECT_EQ(10.0, animation->iterations());
781 EXPECT_EQ(0, animation->timeOffset());
782 EXPECT_EQ(CompositorAnimation::Direction::ALTERNATE_NORMAL, animation->getDi rection());
783 EXPECT_EQ(1.0, animation->playbackRate());
862 784
863 EXPECT_CALL(*m_mockCompositorFactory, createFloatAnimationCurve()) 785 OwnPtr<CompositorFloatAnimationCurve> keyframedFloatCurve = animation->float CurveForTesting();
864 .WillOnce(Return(mockCurvePtr));
865 786
866 usesMockCurve += EXPECT_CALL(*mockCurvePtr, addCubicBezierKeyframe(Composito rFloatKeyframe(0.0, 2.0), CubicBezierTimingFunction::EaseType::EASE)); 787 Vector<CompositorFloatKeyframe> keyframes = keyframedFloatCurve->keyframesFo rTesting();
867 usesMockCurve += EXPECT_CALL(*mockCurvePtr, addLinearKeyframe(CompositorFloa tKeyframe(0.5, -1.0))); 788 ASSERT_EQ(4UL, keyframes.size());
868 usesMockCurve += EXPECT_CALL(*mockCurvePtr, addCubicBezierKeyframe(Composito rFloatKeyframe(1.0, 20.0), 1.0, 2.0, 3.0, 4.0));
869 usesMockCurve += EXPECT_CALL(*mockCurvePtr, addCubicBezierKeyframe(Composito rFloatKeyframe(2.0, 5.0), CubicBezierTimingFunction::EaseType::EASE));
870 789
871 // KeyframeEffect is created 790 EXPECT_EQ(0, keyframes[0].time);
872 WebCompositorAnimationMock* mockAnimationPtr = new WebCompositorAnimationMoc k(CompositorTargetProperty::OPACITY); 791 EXPECT_EQ(2.0f, keyframes[0].value);
873 ExpectationSet usesMockAnimation; 792 EXPECT_EQ(CubicBezierTimingFunction::EaseType::EASE, keyframedFloatCurve->ge tKeyframeEaseTypeForTesting(0));
874 793
875 usesMockCurve += EXPECT_CALL(*m_mockCompositorFactory, createAnimation(Ref(* mockCurvePtr), CompositorTargetProperty::OPACITY, _, _)) 794 EXPECT_EQ(0.5, keyframes[1].time);
876 .WillOnce(Return(mockAnimationPtr)); 795 EXPECT_EQ(-1.0f, keyframes[1].value);
796 EXPECT_TRUE(keyframedFloatCurve->keyframeHasLinearTimingFunctionForTesting(1 ));
877 797
878 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(10)); 798 EXPECT_EQ(1.0, keyframes[2].time);
879 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(0.0)); 799 EXPECT_EQ(20.0f, keyframes[2].value);
880 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setDirection(CompositorA nimation::Direction::ALTERNATE_NORMAL)); 800 EXPECT_EQ(CubicBezierTimingFunction::EaseType::CUSTOM, keyframedFloatCurve-> getKeyframeEaseTypeForTesting(2));
881 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setPlaybackRate(1));
882 801
883 EXPECT_CALL(*mockAnimationPtr, delete_()) 802 EXPECT_EQ(2.0, keyframes[3].time);
884 .Times(1) 803 EXPECT_EQ(5.0f, keyframes[3].value);
885 .After(usesMockAnimation); 804 EXPECT_EQ(CubicBezierTimingFunction::EaseType::EASE, keyframedFloatCurve->ge tKeyframeEaseTypeForTesting(3));
886 EXPECT_CALL(*mockCurvePtr, delete_())
887 .Times(1)
888 .After(usesMockCurve);
889
890 // Go!
891 Vector<OwnPtr<CompositorAnimation>> result;
892 getAnimationOnCompositor(m_timing, *effect, result);
893 EXPECT_EQ(1U, result.size());
894 result[0].reset();
895 } 805 }
896 806
897 TEST_F(AnimationCompositorAnimationsTest, createReversedOpacityAnimation) 807 TEST_F(AnimationCompositorAnimationsTest, createReversedOpacityAnimation)
898 { 808 {
899 RefPtr<TimingFunction> cubicEasyFlipTimingFunction = CubicBezierTimingFuncti on::create(0.0, 0.0, 0.0, 1.0); 809 RefPtr<TimingFunction> cubicEasyFlipTimingFunction = CubicBezierTimingFuncti on::create(0.0, 0.0, 0.0, 1.0);
900 810
901 // KeyframeEffect to convert 811 // KeyframeEffect to convert
902 AnimatableValueKeyframeVector frames; 812 AnimatableValueKeyframeVector frames;
903 frames.append(createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble:: create(2.0).get(), 0)); 813 frames.append(createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble:: create(2.0).get(), 0));
904 frames.append(createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble:: create(-1.0).get(), 0.25)); 814 frames.append(createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble:: create(-1.0).get(), 0.25));
905 frames.append(createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble:: create(20.0).get(), 0.5)); 815 frames.append(createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble:: create(20.0).get(), 0.5));
906 frames.append(createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble:: create(5.0).get(), 1.0)); 816 frames.append(createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble:: create(5.0).get(), 1.0));
907 frames[0]->setEasing(CubicBezierTimingFunction::preset(CubicBezierTimingFunc tion::EaseType::EASE_IN)); 817 frames[0]->setEasing(CubicBezierTimingFunction::preset(CubicBezierTimingFunc tion::EaseType::EASE_IN));
908 frames[1]->setEasing(m_linearTimingFunction.get()); 818 frames[1]->setEasing(m_linearTimingFunction.get());
909 frames[2]->setEasing(cubicEasyFlipTimingFunction.get()); 819 frames[2]->setEasing(cubicEasyFlipTimingFunction.get());
910 AnimatableValueKeyframeEffectModel* effect = AnimatableValueKeyframeEffectMo del::create(frames); 820 AnimatableValueKeyframeEffectModel* effect = AnimatableValueKeyframeEffectMo del::create(frames);
911 821
912 m_timing.timingFunction = m_linearTimingFunction.get(); 822 m_timing.timingFunction = m_linearTimingFunction.get();
913 m_timing.iterationCount = 10; 823 m_timing.iterationCount = 10;
914 m_timing.direction = Timing::PlaybackDirectionAlternateReverse; 824 m_timing.direction = Timing::PlaybackDirectionAlternateReverse;
915 // --
916 825
917 // Curve is created 826 OwnPtr<CompositorAnimation> animation = convertToCompositorAnimation(*effect );
918 WebFloatAnimationCurveMock* mockCurvePtr = new WebFloatAnimationCurveMock(); 827 EXPECT_EQ(CompositorTargetProperty::OPACITY, animation->targetProperty());
919 ExpectationSet usesMockCurve; 828 EXPECT_EQ(10.0, animation->iterations());
829 EXPECT_EQ(0, animation->timeOffset());
830 EXPECT_EQ(CompositorAnimation::Direction::ALTERNATE_REVERSE, animation->getD irection());
831 EXPECT_EQ(1.0, animation->playbackRate());
920 832
921 EXPECT_CALL(*m_mockCompositorFactory, createFloatAnimationCurve()) 833 OwnPtr<CompositorFloatAnimationCurve> keyframedFloatCurve = animation->float CurveForTesting();
922 .WillOnce(Return(mockCurvePtr));
923 834
924 usesMockCurve += EXPECT_CALL(*mockCurvePtr, addCubicBezierKeyframe(Composito rFloatKeyframe(0.0, 2.0), CubicBezierTimingFunction::EaseType::EASE_IN)); 835 Vector<CompositorFloatKeyframe> keyframes = keyframedFloatCurve->keyframesFo rTesting();
925 usesMockCurve += EXPECT_CALL(*mockCurvePtr, addLinearKeyframe(CompositorFloa tKeyframe(0.25, -1.0))); 836 ASSERT_EQ(4UL, keyframes.size());
926 usesMockCurve += EXPECT_CALL(*mockCurvePtr, addCubicBezierKeyframe(Composito rFloatKeyframe(0.5, 20.0), 0.0, 0.0, 0.0, 1.0));
927 usesMockCurve += EXPECT_CALL(*mockCurvePtr, addCubicBezierKeyframe(Composito rFloatKeyframe(1.0, 5.0), CubicBezierTimingFunction::EaseType::EASE));
928 837
929 // Create the animation 838 EXPECT_TRUE(keyframedFloatCurve->curveHasLinearTimingFunctionForTesting());
930 WebCompositorAnimationMock* mockAnimationPtr = new WebCompositorAnimationMoc k(CompositorTargetProperty::OPACITY);
931 ExpectationSet usesMockAnimation;
932 839
933 usesMockCurve += EXPECT_CALL(*m_mockCompositorFactory, createAnimation(Ref(* mockCurvePtr), CompositorTargetProperty::OPACITY, _, _)) 840 EXPECT_EQ(0, keyframes[0].time);
934 .WillOnce(Return(mockAnimationPtr)); 841 EXPECT_EQ(2.0f, keyframes[0].value);
842 EXPECT_EQ(CubicBezierTimingFunction::EaseType::EASE_IN, keyframedFloatCurve- >getKeyframeEaseTypeForTesting(0));
935 843
936 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(10)); 844 EXPECT_EQ(0.25, keyframes[1].time);
937 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(0.0)); 845 EXPECT_EQ(-1.0f, keyframes[1].value);
938 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setDirection(CompositorA nimation::Direction::ALTERNATE_REVERSE)); 846 EXPECT_TRUE(keyframedFloatCurve->keyframeHasLinearTimingFunctionForTesting(1 ));
939 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setPlaybackRate(1));
940 847
941 EXPECT_CALL(*mockAnimationPtr, delete_()) 848 EXPECT_EQ(0.5, keyframes[2].time);
942 .Times(1) 849 EXPECT_EQ(20.0f, keyframes[2].value);
943 .After(usesMockAnimation); 850 EXPECT_EQ(CubicBezierTimingFunction::EaseType::CUSTOM, keyframedFloatCurve-> getKeyframeEaseTypeForTesting(2));
944 EXPECT_CALL(*mockCurvePtr, delete_())
945 .Times(1)
946 .After(usesMockCurve);
947 851
948 // Go! 852 EXPECT_EQ(1.0, keyframes[3].time);
949 Vector<OwnPtr<CompositorAnimation>> result; 853 EXPECT_EQ(5.0f, keyframes[3].value);
950 getAnimationOnCompositor(m_timing, *effect, result); 854 EXPECT_EQ(CubicBezierTimingFunction::EaseType::EASE, keyframedFloatCurve->ge tKeyframeEaseTypeForTesting(3));
951 EXPECT_EQ(1U, result.size());
952 result[0].reset();
953 } 855 }
954 856
955 TEST_F(AnimationCompositorAnimationsTest, createReversedOpacityAnimationNegative StartDelay) 857 TEST_F(AnimationCompositorAnimationsTest, createReversedOpacityAnimationNegative StartDelay)
956 { 858 {
957 // KeyframeEffect to convert 859 // KeyframeEffect to convert
958 AnimatableValueKeyframeEffectModel* effect = createKeyframeEffectModel( 860 AnimatableValueKeyframeEffectModel* effect = createKeyframeEffectModel(
959 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(2.0 ).get(), 0), 861 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(2.0 ).get(), 0),
960 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0 ).get(), 1.0)); 862 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0 ).get(), 1.0));
961 863
864 const double negativeStartDelay = -3;
865
962 m_timing.iterationCount = 5.0; 866 m_timing.iterationCount = 5.0;
963 m_timing.iterationDuration = 1.5; 867 m_timing.iterationDuration = 1.5;
964 m_timing.startDelay = -3; 868 m_timing.startDelay = negativeStartDelay;
965 m_timing.direction = Timing::PlaybackDirectionAlternateReverse; 869 m_timing.direction = Timing::PlaybackDirectionAlternateReverse;
966 // --
967 870
968 // Curve is created 871 OwnPtr<CompositorAnimation> animation = convertToCompositorAnimation(*effect );
969 WebFloatAnimationCurveMock* mockCurvePtr = new WebFloatAnimationCurveMock; 872 EXPECT_EQ(CompositorTargetProperty::OPACITY, animation->targetProperty());
970 ExpectationSet usesMockCurve; 873 EXPECT_EQ(5.0, animation->iterations());
971 EXPECT_CALL(*m_mockCompositorFactory, createFloatAnimationCurve()) 874 EXPECT_EQ(-negativeStartDelay, animation->timeOffset());
972 .WillOnce(Return(mockCurvePtr)); 875 EXPECT_EQ(CompositorAnimation::Direction::ALTERNATE_REVERSE, animation->getD irection());
876 EXPECT_EQ(1.0, animation->playbackRate());
973 877
974 usesMockCurve += EXPECT_CALL(*mockCurvePtr, addLinearKeyframe(CompositorFloa tKeyframe(0.0, 2.0))); 878 OwnPtr<CompositorFloatAnimationCurve> keyframedFloatCurve = animation->float CurveForTesting();
975 usesMockCurve += EXPECT_CALL(*mockCurvePtr, addCubicBezierKeyframe(Composito rFloatKeyframe(1.5, 5.0), CubicBezierTimingFunction::EaseType::EASE));
976 879
977 // Create animation 880 Vector<CompositorFloatKeyframe> keyframes = keyframedFloatCurve->keyframesFo rTesting();
978 WebCompositorAnimationMock* mockAnimationPtr = new WebCompositorAnimationMoc k(CompositorTargetProperty::OPACITY); 881 ASSERT_EQ(2UL, keyframes.size());
979 ExpectationSet usesMockAnimation;
980
981 usesMockCurve += EXPECT_CALL(*m_mockCompositorFactory, createAnimation(Ref(* mockCurvePtr), CompositorTargetProperty::OPACITY, _, _))
982 .WillOnce(Return(mockAnimationPtr));
983
984 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(5));
985 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(3.0));
986 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setDirection(CompositorA nimation::Direction::ALTERNATE_REVERSE));
987 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setPlaybackRate(1));
988
989 EXPECT_CALL(*mockAnimationPtr, delete_())
990 .Times(1)
991 .After(usesMockAnimation);
992 EXPECT_CALL(*mockCurvePtr, delete_())
993 .Times(1)
994 .After(usesMockCurve);
995
996 // Go!
997 Vector<OwnPtr<CompositorAnimation>> result;
998 getAnimationOnCompositor(m_timing, *effect, result);
999 EXPECT_EQ(1U, result.size());
1000 result[0].reset();
1001 } 882 }
1002 883
1003 TEST_F(AnimationCompositorAnimationsTest, createSimpleOpacityAnimationPlaybackRa tes) 884 TEST_F(AnimationCompositorAnimationsTest, createSimpleOpacityAnimationPlaybackRa tes)
1004 { 885 {
1005 // KeyframeEffect to convert 886 // KeyframeEffect to convert
1006 AnimatableValueKeyframeEffectModel* effect = createKeyframeEffectModel( 887 AnimatableValueKeyframeEffectModel* effect = createKeyframeEffectModel(
1007 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(2.0 ).get(), 0), 888 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(2.0 ).get(), 0),
1008 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0 ).get(), 1.0)); 889 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0 ).get(), 1.0));
1009 890
1010 m_timing.playbackRate = 2; 891 const double playbackRate = 2;
1011 // -- 892 const double playerPlaybackRate = -1.5;
1012 893
1013 // Curve is created 894 m_timing.playbackRate = playbackRate;
1014 WebFloatAnimationCurveMock* mockCurvePtr = new WebFloatAnimationCurveMock;
1015 ExpectationSet usesMockCurve;
1016 EXPECT_CALL(*m_mockCompositorFactory, createFloatAnimationCurve())
1017 .WillOnce(Return(mockCurvePtr));
1018 895
1019 usesMockCurve += EXPECT_CALL(*mockCurvePtr, addLinearKeyframe(CompositorFloa tKeyframe(0.0, 2.0))); 896 OwnPtr<CompositorAnimation> animation = convertToCompositorAnimation(*effect , playerPlaybackRate);
1020 usesMockCurve += EXPECT_CALL(*mockCurvePtr, addCubicBezierKeyframe(Composito rFloatKeyframe(1.0, 5.0), CubicBezierTimingFunction::EaseType::EASE)); 897 EXPECT_EQ(CompositorTargetProperty::OPACITY, animation->targetProperty());
898 EXPECT_EQ(1.0, animation->iterations());
899 EXPECT_EQ(0, animation->timeOffset());
900 EXPECT_EQ(CompositorAnimation::Direction::NORMAL, animation->getDirection()) ;
901 EXPECT_EQ(playbackRate * playerPlaybackRate, animation->playbackRate());
1021 902
1022 // Create animation 903 OwnPtr<CompositorFloatAnimationCurve> keyframedFloatCurve = animation->float CurveForTesting();
1023 WebCompositorAnimationMock* mockAnimationPtr = new WebCompositorAnimationMoc k(CompositorTargetProperty::OPACITY);
1024 ExpectationSet usesMockAnimation;
1025 904
1026 usesMockCurve += EXPECT_CALL(*m_mockCompositorFactory, createAnimation(Ref(* mockCurvePtr), CompositorTargetProperty::OPACITY, _, _)) 905 Vector<CompositorFloatKeyframe> keyframes = keyframedFloatCurve->keyframesFo rTesting();
1027 .WillOnce(Return(mockAnimationPtr)); 906 ASSERT_EQ(2UL, keyframes.size());
1028
1029 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(1));
1030 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(0.0));
1031 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setDirection(CompositorA nimation::Direction::NORMAL));
1032 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setPlaybackRate(-3));
1033
1034 EXPECT_CALL(*mockAnimationPtr, delete_())
1035 .Times(1)
1036 .After(usesMockAnimation);
1037 EXPECT_CALL(*mockCurvePtr, delete_())
1038 .Times(1)
1039 .After(usesMockCurve);
1040
1041 // Go!
1042 Vector<OwnPtr<CompositorAnimation>> result;
1043 // Set player plaback rate also
1044 getAnimationOnCompositor(m_timing, *effect, result, -1.5);
1045 EXPECT_EQ(1U, result.size());
1046 result[0].reset();
1047 } 907 }
1048 908
1049 TEST_F(AnimationCompositorAnimationsTest, createSimpleOpacityAnimationFillModeNo ne) 909 TEST_F(AnimationCompositorAnimationsTest, createSimpleOpacityAnimationFillModeNo ne)
1050 { 910 {
1051 // KeyframeEffect to convert 911 // KeyframeEffect to convert
1052 AnimatableValueKeyframeEffectModel* effect = createKeyframeEffectModel( 912 AnimatableValueKeyframeEffectModel* effect = createKeyframeEffectModel(
1053 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(2.0 ).get(), 0), 913 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(2.0 ).get(), 0),
1054 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0 ).get(), 1.0)); 914 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0 ).get(), 1.0));
1055 915
1056 m_timing.fillMode = Timing::FillModeNone; 916 m_timing.fillMode = Timing::FillModeNone;
1057 917
1058 // Curve is created 918 OwnPtr<CompositorAnimation> animation = convertToCompositorAnimation(*effect );
1059 WebFloatAnimationCurveMock* mockCurvePtr = new WebFloatAnimationCurveMock; 919 EXPECT_EQ(CompositorAnimation::FillMode::NONE, animation->getFillMode());
1060 ExpectationSet usesMockCurve;
1061 EXPECT_CALL(*m_mockCompositorFactory, createFloatAnimationCurve())
1062 .WillOnce(Return(mockCurvePtr));
1063
1064 usesMockCurve += EXPECT_CALL(*mockCurvePtr, addLinearKeyframe(CompositorFloa tKeyframe(0.0, 2.0)));
1065 usesMockCurve += EXPECT_CALL(*mockCurvePtr, addCubicBezierKeyframe(Composito rFloatKeyframe(1.0, 5.0), CubicBezierTimingFunction::EaseType::EASE));
1066
1067 // Create animation
1068 WebCompositorAnimationMock* mockAnimationPtr = new WebCompositorAnimationMoc k(CompositorTargetProperty::OPACITY);
1069 ExpectationSet usesMockAnimation;
1070
1071 usesMockCurve += EXPECT_CALL(*m_mockCompositorFactory, createAnimation(Ref(* mockCurvePtr), CompositorTargetProperty::OPACITY, _, _))
1072 .WillOnce(Return(mockAnimationPtr));
1073
1074 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(1));
1075 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(0.0));
1076 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setDirection(CompositorA nimation::Direction::NORMAL));
1077 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setPlaybackRate(1));
1078 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setFillMode(CompositorAn imation::FillMode::NONE));
1079
1080 EXPECT_CALL(*mockAnimationPtr, delete_())
1081 .Times(1)
1082 .After(usesMockAnimation);
1083 EXPECT_CALL(*mockCurvePtr, delete_())
1084 .Times(1)
1085 .After(usesMockCurve);
1086
1087 // Go!
1088 Vector<OwnPtr<CompositorAnimation>> result;
1089 getAnimationOnCompositor(m_timing, *effect, result);
1090 EXPECT_EQ(1U, result.size());
1091 result[0].reset();
1092 } 920 }
1093 921
1094 TEST_F(AnimationCompositorAnimationsTest, createSimpleOpacityAnimationFillModeAu to) 922 TEST_F(AnimationCompositorAnimationsTest, createSimpleOpacityAnimationFillModeAu to)
1095 { 923 {
1096 // KeyframeEffect to convert 924 // KeyframeEffect to convert
1097 AnimatableValueKeyframeEffectModel* effect = createKeyframeEffectModel( 925 AnimatableValueKeyframeEffectModel* effect = createKeyframeEffectModel(
1098 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(2.0 ).get(), 0), 926 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(2.0 ).get(), 0),
1099 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0 ).get(), 1.0)); 927 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0 ).get(), 1.0));
1100 928
1101 m_timing.fillMode = Timing::FillModeAuto; 929 m_timing.fillMode = Timing::FillModeAuto;
1102 930
1103 // Curve is created 931 OwnPtr<CompositorAnimation> animation = convertToCompositorAnimation(*effect );
1104 WebFloatAnimationCurveMock* mockCurvePtr = new WebFloatAnimationCurveMock; 932 EXPECT_EQ(CompositorTargetProperty::OPACITY, animation->targetProperty());
1105 ExpectationSet usesMockCurve; 933 EXPECT_EQ(1.0, animation->iterations());
1106 EXPECT_CALL(*m_mockCompositorFactory, createFloatAnimationCurve()) 934 EXPECT_EQ(0, animation->timeOffset());
1107 .WillOnce(Return(mockCurvePtr)); 935 EXPECT_EQ(CompositorAnimation::Direction::NORMAL, animation->getDirection()) ;
1108 936 EXPECT_EQ(1.0, animation->playbackRate());
1109 usesMockCurve += EXPECT_CALL(*mockCurvePtr, addLinearKeyframe(CompositorFloa tKeyframe(0.0, 2.0))); 937 EXPECT_EQ(CompositorAnimation::FillMode::NONE, animation->getFillMode());
1110 usesMockCurve += EXPECT_CALL(*mockCurvePtr, addCubicBezierKeyframe(Composito rFloatKeyframe(1.0, 5.0), CubicBezierTimingFunction::EaseType::EASE));
1111
1112 // Create animation
1113 WebCompositorAnimationMock* mockAnimationPtr = new WebCompositorAnimationMoc k(CompositorTargetProperty::OPACITY);
1114 ExpectationSet usesMockAnimation;
1115
1116 usesMockCurve += EXPECT_CALL(*m_mockCompositorFactory, createAnimation(Ref(* mockCurvePtr), CompositorTargetProperty::OPACITY, _, _))
1117 .WillOnce(Return(mockAnimationPtr));
1118
1119 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(1));
1120 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(0.0));
1121 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setDirection(CompositorA nimation::Direction::NORMAL));
1122 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setPlaybackRate(1));
1123 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setFillMode(CompositorAn imation::FillMode::NONE));
1124
1125 EXPECT_CALL(*mockAnimationPtr, delete_())
1126 .Times(1)
1127 .After(usesMockAnimation);
1128 EXPECT_CALL(*mockCurvePtr, delete_())
1129 .Times(1)
1130 .After(usesMockCurve);
1131
1132 // Go!
1133 Vector<OwnPtr<CompositorAnimation>> result;
1134 getAnimationOnCompositor(m_timing, *effect, result);
1135 EXPECT_EQ(1U, result.size());
1136 result[0].reset();
1137 } 938 }
1138 939
1139 TEST_F(AnimationCompositorAnimationsTest, createSimpleOpacityAnimationWithTiming Function) 940 TEST_F(AnimationCompositorAnimationsTest, createSimpleOpacityAnimationWithTiming Function)
1140 { 941 {
1141 // KeyframeEffect to convert 942 // KeyframeEffect to convert
1142 AnimatableValueKeyframeEffectModel* effect = createKeyframeEffectModel( 943 AnimatableValueKeyframeEffectModel* effect = createKeyframeEffectModel(
1143 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(2.0 ).get(), 0), 944 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(2.0 ).get(), 0),
1144 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0 ).get(), 1.0)); 945 createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0 ).get(), 1.0));
1145 946
1146 m_timing.timingFunction = m_cubicCustomTimingFunction; 947 m_timing.timingFunction = m_cubicCustomTimingFunction;
1147 948
1148 // Curve is created 949 OwnPtr<CompositorAnimation> animation = convertToCompositorAnimation(*effect );
1149 WebFloatAnimationCurveMock* mockCurvePtr = new WebFloatAnimationCurveMock;
1150 ExpectationSet usesMockCurve;
1151 EXPECT_CALL(*m_mockCompositorFactory, createFloatAnimationCurve())
1152 .WillOnce(Return(mockCurvePtr));
1153 950
1154 usesMockCurve += EXPECT_CALL(*mockCurvePtr, addLinearKeyframe(CompositorFloa tKeyframe(0.0, 2.0))); 951 OwnPtr<CompositorFloatAnimationCurve> keyframedFloatCurve = animation->float CurveForTesting();
1155 usesMockCurve += EXPECT_CALL(*mockCurvePtr, addCubicBezierKeyframe(Composito rFloatKeyframe(1.0, 5.0), CubicBezierTimingFunction::EaseType::EASE));
1156 usesMockCurve += EXPECT_CALL(*mockCurvePtr, setCubicBezierTimingFunction(1, 2, 3, 4));
1157 952
1158 // Create animation 953 Vector<CompositorFloatKeyframe> keyframes = keyframedFloatCurve->keyframesFo rTesting();
1159 WebCompositorAnimationMock* mockAnimationPtr = new WebCompositorAnimationMoc k(CompositorTargetProperty::OPACITY); 954 ASSERT_EQ(2UL, keyframes.size());
1160 ExpectationSet usesMockAnimation;
1161 955
1162 usesMockCurve += EXPECT_CALL(*m_mockCompositorFactory, createAnimation(Ref(* mockCurvePtr), CompositorTargetProperty::OPACITY, _, _)) 956 EXPECT_EQ(CubicBezierTimingFunction::EaseType::CUSTOM, keyframedFloatCurve-> getCurveEaseTypeForTesting());
1163 .WillOnce(Return(mockAnimationPtr));
1164 957
1165 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(1)); 958 EXPECT_EQ(0, keyframes[0].time);
1166 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(0.0)); 959 EXPECT_EQ(2.0f, keyframes[0].value);
1167 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setDirection(CompositorA nimation::Direction::NORMAL)); 960 EXPECT_TRUE(keyframedFloatCurve->keyframeHasLinearTimingFunctionForTesting(0 ));
1168 usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setPlaybackRate(1));
1169 961
1170 EXPECT_CALL(*mockAnimationPtr, delete_()) 962 EXPECT_EQ(1.0, keyframes[1].time);
1171 .Times(1) 963 EXPECT_EQ(5.0f, keyframes[1].value);
1172 .After(usesMockAnimation); 964 EXPECT_EQ(CubicBezierTimingFunction::EaseType::EASE, keyframedFloatCurve->ge tKeyframeEaseTypeForTesting(1));
1173 EXPECT_CALL(*mockCurvePtr, delete_())
1174 .Times(1)
1175 .After(usesMockCurve);
1176
1177 // Go!
1178 Vector<OwnPtr<CompositorAnimation>> result;
1179 getAnimationOnCompositor(m_timing, *effect, result);
1180 EXPECT_EQ(1U, result.size());
1181 result[0].reset();
1182 } 965 }
1183 966
1184 TEST_F(AnimationCompositorAnimationsTest, CancelIncompatibleCompositorAnimations ) 967 TEST_F(AnimationCompositorAnimationsTest, cancelIncompatibleCompositorAnimations )
1185 { 968 {
1186 Persistent<Element> element = m_document->createElement("shared", ASSERT_NO_ EXCEPTION); 969 Persistent<Element> element = m_document->createElement("shared", ASSERT_NO_ EXCEPTION);
1187 970
1188 LayoutObjectProxy* layoutObject = LayoutObjectProxy::create(element.get()); 971 LayoutObjectProxy* layoutObject = LayoutObjectProxy::create(element.get());
1189 element->setLayoutObject(layoutObject); 972 element->setLayoutObject(layoutObject);
1190 973
1191 AnimatableValueKeyframeVector keyFrames; 974 AnimatableValueKeyframeVector keyFrames;
1192 keyFrames.append(createDefaultKeyframe(CSSPropertyOpacity, EffectModel::Comp ositeReplace, 0.0).get()); 975 keyFrames.append(createDefaultKeyframe(CSSPropertyOpacity, EffectModel::Comp ositeReplace, 0.0).get());
1193 keyFrames.append(createDefaultKeyframe(CSSPropertyOpacity, EffectModel::Comp ositeReplace, 1.0).get()); 976 keyFrames.append(createDefaultKeyframe(CSSPropertyOpacity, EffectModel::Comp ositeReplace, 1.0).get());
1194 EffectModel* animationEffect1 = AnimatableValueKeyframeEffectModel::create(k eyFrames); 977 EffectModel* animationEffect1 = AnimatableValueKeyframeEffectModel::create(k eyFrames);
(...skipping 30 matching lines...) Expand all
1225 simulateFrame(1.); 1008 simulateFrame(1.);
1226 1009
1227 element->setLayoutObject(nullptr); 1010 element->setLayoutObject(nullptr);
1228 LayoutObjectProxy::dispose(layoutObject); 1011 LayoutObjectProxy::dispose(layoutObject);
1229 1012
1230 ThreadHeap::collectAllGarbage(); 1013 ThreadHeap::collectAllGarbage();
1231 EXPECT_TRUE(element->elementAnimations()->animations().isEmpty()); 1014 EXPECT_TRUE(element->elementAnimations()->animations().isEmpty());
1232 } 1015 }
1233 1016
1234 } // namespace blink 1017 } // namespace blink
OLDNEW
« no previous file with comments | « cc/animation/timing_function.cc ('k') | third_party/WebKit/Source/core/animation/CompositorAnimationsTestHelper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698