151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)/* 251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * Copyright (c) 2013, Google Inc. All rights reserved. 351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * 451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * Redistribution and use in source and binary forms, with or without 551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * modification, are permitted provided that the following conditions are 651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * met: 751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * 851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * * Redistributions of source code must retain the above copyright 951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * notice, this list of conditions and the following disclaimer. 1051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * * Redistributions in binary form must reproduce the above 1151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 1251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * in the documentation and/or other materials provided with the 1351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * distribution. 1451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 1551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * contributors may be used to endorse or promote products derived from 1651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * this software without specific prior written permission. 1751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * 1851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) */ 3051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 3151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "config.h" 3251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 3351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "core/animation/CompositorAnimations.h" 3451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 3551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "core/animation/CompositorAnimationsImpl.h" 3651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "core/animation/CompositorAnimationsTestHelper.h" 37197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "core/animation/animatable/AnimatableDouble.h" 38197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "core/animation/animatable/AnimatableFilterOperations.h" 39197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "core/animation/animatable/AnimatableTransform.h" 40197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "core/animation/animatable/AnimatableValueTestHelper.h" 41197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "platform/geometry/FloatBox.h" 4251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "platform/geometry/IntSize.h" 43a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/graphics/filters/FilterOperations.h" 4451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "platform/transforms/TransformOperations.h" 4551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "platform/transforms/TranslateTransformOperation.h" 469e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)#include "public/platform/WebCompositorAnimation.h" 4751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "wtf/HashFunctions.h" 4851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "wtf/OwnPtr.h" 4951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "wtf/PassOwnPtr.h" 5051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "wtf/PassRefPtr.h" 5151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "wtf/RefPtr.h" 5251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 5351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include <gmock/gmock.h> 5451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include <gtest/gtest.h> 5551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 56c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 5751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 5851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)using ::testing::CloneToPassOwnPtr; 5951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)using ::testing::ExpectationSet; 6051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)using ::testing::Ref; 6151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)using ::testing::Return; 6251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)using ::testing::_; 6351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 6451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)class AnimationCompositorAnimationsTest : public AnimationCompositorAnimationsTestBase { 6551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)protected: 6651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) RefPtr<TimingFunction> m_linearTimingFunction; 6751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) RefPtr<TimingFunction> m_cubicEaseTimingFunction; 6851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) RefPtr<TimingFunction> m_cubicCustomTimingFunction; 6951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) RefPtr<TimingFunction> m_stepTimingFunction; 7051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 7151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) Timing m_timing; 7251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) CompositorAnimationsImpl::CompositorTiming m_compositorTiming; 73a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch OwnPtrWillBePersistent<AnimatableValueKeyframeVector> m_keyframeVector2; 74a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtrWillBePersistent<AnimatableValueKeyframeEffectModel> m_keyframeAnimationEffect2; 75a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch OwnPtrWillBePersistent<AnimatableValueKeyframeVector> m_keyframeVector5; 76a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtrWillBePersistent<AnimatableValueKeyframeEffectModel> m_keyframeAnimationEffect5; 7751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 7851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) virtual void SetUp() 7951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) { 8051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) AnimationCompositorAnimationsTestBase::SetUp(); 8151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 82f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu m_linearTimingFunction = LinearTimingFunction::shared(); 8351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_cubicEaseTimingFunction = CubicBezierTimingFunction::preset(CubicBezierTimingFunction::Ease); 8451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_cubicCustomTimingFunction = CubicBezierTimingFunction::create(1, 2, 3, 4); 857242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_stepTimingFunction = StepsTimingFunction::create(1, StepsTimingFunction::End); 8651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 8751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing = createCompositableTiming(); 8851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_compositorTiming = CompositorAnimationsImpl::CompositorTiming(); 8951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // Make sure the CompositableTiming is really compositable, otherwise 9051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // most other tests will fail. 9151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) ASSERT(convertTimingForCompositor(m_timing, m_compositorTiming)); 9251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 9351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_keyframeVector2 = createCompositableFloatKeyframeVector(2); 94a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch m_keyframeAnimationEffect2 = AnimatableValueKeyframeEffectModel::create(*m_keyframeVector2); 95a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 9651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_keyframeVector5 = createCompositableFloatKeyframeVector(5); 97a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch m_keyframeAnimationEffect5 = AnimatableValueKeyframeEffectModel::create(*m_keyframeVector5); 9851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) } 9951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 10051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)public: 10151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 10251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bool convertTimingForCompositor(const Timing& t, CompositorAnimationsImpl::CompositorTiming& out) 10351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) { 1047242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return CompositorAnimationsImpl::convertTimingForCompositor(t, 0, out, 1); 10551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) } 106a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) bool isCandidateForAnimationOnCompositor(const Timing& timing, const AnimationEffect& effect) 10751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) { 1087242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return CompositorAnimations::instance()->isCandidateForAnimationOnCompositor(timing, effect, 1); 10951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) } 1109e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) void getAnimationOnCompositor(Timing& timing, AnimatableValueKeyframeEffectModel& effect, Vector<OwnPtr<WebCompositorAnimation> >& animations) 11151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) { 1127242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return getAnimationOnCompositor(timing, effect, animations, 1); 1137242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 1147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void getAnimationOnCompositor(Timing& timing, AnimatableValueKeyframeEffectModel& effect, Vector<OwnPtr<WebCompositorAnimation> >& animations, double playerPlaybackRate) 1157242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci { 1167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return CompositorAnimationsImpl::getAnimationOnCompositor(timing, std::numeric_limits<double>::quiet_NaN(), 0, effect, animations, playerPlaybackRate); 11751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) } 118197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch bool getAnimationBounds(FloatBox& boundingBox, const AnimationEffect& effect, double minValue, double maxValue) 119197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 120197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return CompositorAnimations::instance()->getAnimatedBoundingBox(boundingBox, effect, minValue, maxValue); 121197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 12251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 123a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch bool duplicateSingleKeyframeAndTestIsCandidateOnResult(AnimatableValueKeyframe* frame) 124a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) { 125a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) EXPECT_EQ(frame->offset(), 0); 126a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch AnimatableValueKeyframeVector frames; 127a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtrWillBeRawPtr<Keyframe> second = frame->cloneWithOffset(1); 128a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 129a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) frames.append(frame); 130a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch frames.append(toAnimatableValueKeyframe(second.get())); 131a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return isCandidateForAnimationOnCompositor(m_timing, *AnimatableValueKeyframeEffectModel::create(frames).get()); 132a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) } 133a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 13451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // ------------------------------------------------------------------- 13551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 13651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) Timing createCompositableTiming() 13751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) { 13851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) Timing timing; 13951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) timing.startDelay = 0; 14051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) timing.fillMode = Timing::FillModeNone; 14151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) timing.iterationStart = 0; 14251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) timing.iterationCount = 1; 14351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) timing.iterationDuration = 1.0; 14451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) timing.playbackRate = 1.0; 14551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) timing.direction = Timing::PlaybackDirectionNormal; 14651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) ASSERT(m_linearTimingFunction); 14751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) timing.timingFunction = m_linearTimingFunction; 14851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return timing; 14951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) } 15051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 151a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch PassRefPtrWillBeRawPtr<AnimatableValueKeyframe> createReplaceOpKeyframe(CSSPropertyID id, AnimatableValue* value, double offset = 0) 15251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) { 153a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtrWillBeRawPtr<AnimatableValueKeyframe> keyframe = AnimatableValueKeyframe::create(); 15451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) keyframe->setPropertyValue(id, value); 15551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) keyframe->setComposite(AnimationEffect::CompositeReplace); 15651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) keyframe->setOffset(offset); 157f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu keyframe->setEasing(LinearTimingFunction::shared()); 15851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return keyframe; 15951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) } 16051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 161a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch PassRefPtrWillBeRawPtr<AnimatableValueKeyframe> createDefaultKeyframe(CSSPropertyID id, AnimationEffect::CompositeOperation op, double offset = 0) 16251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) { 16307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch RefPtrWillBeRawPtr<AnimatableValue> value = nullptr; 164aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch if (id == CSSPropertyTransform) 16551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) value = AnimatableTransform::create(TransformOperations()); 16651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) else 16751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) value = AnimatableDouble::create(10.0); 16851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 169a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtrWillBeRawPtr<AnimatableValueKeyframe> keyframe = createReplaceOpKeyframe(id, value.get(), offset); 17051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) keyframe->setComposite(op); 17151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return keyframe; 17251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) } 17351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 174a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch PassOwnPtrWillBeRawPtr<AnimatableValueKeyframeVector> createCompositableFloatKeyframeVector(size_t n) 17551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) { 17651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) Vector<double> values; 17751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) for (size_t i = 0; i < n; i++) { 17851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) values.append(static_cast<double>(i)); 17951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) } 18051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return createCompositableFloatKeyframeVector(values); 18151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) } 18251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 183a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch PassOwnPtrWillBeRawPtr<AnimatableValueKeyframeVector> createCompositableFloatKeyframeVector(Vector<double>& values) 18451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) { 185a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch OwnPtrWillBeRawPtr<AnimatableValueKeyframeVector> frames = adoptPtrWillBeNoop(new AnimatableValueKeyframeVector); 18651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) for (size_t i = 0; i < values.size(); i++) { 18751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) double offset = 1.0 / (values.size() - 1) * i; 18807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch RefPtrWillBeRawPtr<AnimatableDouble> value = AnimatableDouble::create(values[i]); 189d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) frames->append(createReplaceOpKeyframe(CSSPropertyOpacity, value.get(), offset).get()); 19051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) } 191d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return frames.release(); 19251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) } 19351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 194197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch PassOwnPtrWillBeRawPtr<AnimatableValueKeyframeVector> createCompositableTransformKeyframeVector(const Vector<TransformOperations>& values) 195197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 196197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch OwnPtrWillBeRawPtr<AnimatableValueKeyframeVector> frames = adoptPtrWillBeNoop(new AnimatableValueKeyframeVector); 197197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch for (size_t i = 0; i < values.size(); ++i) { 198197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch double offset = 1.0f / (values.size() - 1) * i; 199197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch RefPtrWillBeRawPtr<AnimatableTransform> value = AnimatableTransform::create(values[i]); 200197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch frames->append(createReplaceOpKeyframe(CSSPropertyTransform, value.get(), offset).get()); 201197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 202197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return frames.release(); 203197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 204197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 205a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch PassRefPtrWillBeRawPtr<AnimatableValueKeyframeEffectModel> createKeyframeEffectModel(PassRefPtrWillBeRawPtr<AnimatableValueKeyframe> prpFrom, PassRefPtrWillBeRawPtr<AnimatableValueKeyframe> prpTo, PassRefPtrWillBeRawPtr<AnimatableValueKeyframe> prpC = nullptr, PassRefPtrWillBeRawPtr<AnimatableValueKeyframe> prpD = nullptr) 20651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) { 207a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtrWillBeRawPtr<AnimatableValueKeyframe> from = prpFrom; 208a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtrWillBeRawPtr<AnimatableValueKeyframe> to = prpTo; 209a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtrWillBeRawPtr<AnimatableValueKeyframe> c = prpC; 210a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtrWillBeRawPtr<AnimatableValueKeyframe> d = prpD; 21151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 21251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(from->offset(), 0); 213a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch AnimatableValueKeyframeVector frames; 21451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) frames.append(from); 21551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_LE(from->offset(), to->offset()); 21651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) frames.append(to); 21751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (c) { 21851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_LE(to->offset(), c->offset()); 21951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) frames.append(c); 22051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) } 22151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (d) { 22251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) frames.append(d); 22351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_LE(c->offset(), d->offset()); 22451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(d->offset(), 1.0); 22551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) } else { 22651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(to->offset(), 1.0); 22751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) } 22851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (!HasFatalFailure()) { 229a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return AnimatableValueKeyframeEffectModel::create(frames); 23051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) } 23107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return nullptr; 23251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) } 23351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 23451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)}; 23551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 23651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)// ----------------------------------------------------------------------- 23751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)// ----------------------------------------------------------------------- 23851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 239a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)TEST_F(AnimationCompositorAnimationsTest, isCandidateForAnimationOnCompositorKeyframeMultipleCSSProperties) 24051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 241a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtrWillBeRawPtr<AnimatableValueKeyframe> keyframeGoodMultiple = createDefaultKeyframe(CSSPropertyOpacity, AnimationEffect::CompositeReplace); 242aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch keyframeGoodMultiple->setPropertyValue(CSSPropertyTransform, AnimatableTransform::create(TransformOperations()).get()); 243a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch EXPECT_TRUE(duplicateSingleKeyframeAndTestIsCandidateOnResult(keyframeGoodMultiple.get())); 24451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 245a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtrWillBeRawPtr<AnimatableValueKeyframe> keyframeBadMultipleID = createDefaultKeyframe(CSSPropertyColor, AnimationEffect::CompositeReplace); 24609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) keyframeBadMultipleID->setPropertyValue(CSSPropertyOpacity, AnimatableDouble::create(10.0).get()); 247a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch EXPECT_FALSE(duplicateSingleKeyframeAndTestIsCandidateOnResult(keyframeBadMultipleID.get())); 24851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 24951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 250a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)TEST_F(AnimationCompositorAnimationsTest, isNotCandidateForCompositorAnimationTransformDependsOnBoxSize) 251a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles){ 252a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) TransformOperations ops; 2539e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) ops.operations().append(TranslateTransformOperation::create(Length(2, Fixed), Length(2, Fixed), TransformOperation::TranslateX)); 254a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtrWillBeRawPtr<AnimatableValueKeyframe> goodKeyframe = createReplaceOpKeyframe(CSSPropertyTransform, AnimatableTransform::create(ops).get()); 255a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch EXPECT_TRUE(duplicateSingleKeyframeAndTestIsCandidateOnResult(goodKeyframe.get())); 256a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 2579e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) ops.operations().append(TranslateTransformOperation::create(Length(50, Percent), Length(2, Fixed), TransformOperation::TranslateX)); 258a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtrWillBeRawPtr<AnimatableValueKeyframe> badKeyframe = createReplaceOpKeyframe(CSSPropertyTransform, AnimatableTransform::create(ops).get()); 259a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch EXPECT_FALSE(duplicateSingleKeyframeAndTestIsCandidateOnResult(badKeyframe.get())); 260a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 26109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) TransformOperations ops2; 2629e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) Length calcLength = Length(100, Percent).blend(Length(100, Fixed), 0.5, ValueRangeAll); 2639e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) ops2.operations().append(TranslateTransformOperation::create(calcLength, Length(0, Fixed), TransformOperation::TranslateX)); 264a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtrWillBeRawPtr<AnimatableValueKeyframe> badKeyframe2 = createReplaceOpKeyframe(CSSPropertyTransform, AnimatableTransform::create(ops2).get()); 265a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch EXPECT_FALSE(duplicateSingleKeyframeAndTestIsCandidateOnResult(badKeyframe2.get())); 26651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 26751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 26809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)TEST_F(AnimationCompositorAnimationsTest, isCandidateForAnimationOnCompositorKeyframeEffectModelMultipleFramesOkay) 26951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 270a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch AnimatableValueKeyframeVector framesSame; 27151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) framesSame.append(createDefaultKeyframe(CSSPropertyOpacity, AnimationEffect::CompositeReplace, 0.0).get()); 27251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) framesSame.append(createDefaultKeyframe(CSSPropertyOpacity, AnimationEffect::CompositeReplace, 1.0).get()); 273a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch EXPECT_TRUE(isCandidateForAnimationOnCompositor(m_timing, *AnimatableValueKeyframeEffectModel::create(framesSame).get())); 27451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 275a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch AnimatableValueKeyframeVector framesMixed; 27651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) framesMixed.append(createDefaultKeyframe(CSSPropertyOpacity, AnimationEffect::CompositeReplace, 0.0).get()); 277aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch framesMixed.append(createDefaultKeyframe(CSSPropertyTransform, AnimationEffect::CompositeReplace, 1.0).get()); 278a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch EXPECT_FALSE(isCandidateForAnimationOnCompositor(m_timing, *AnimatableValueKeyframeEffectModel::create(framesMixed).get())); 27951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 28051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 28109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)TEST_F(AnimationCompositorAnimationsTest, isCandidateForAnimationOnCompositorKeyframeEffectModel) 28251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 283a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch AnimatableValueKeyframeVector framesSame; 28451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) framesSame.append(createDefaultKeyframe(CSSPropertyColor, AnimationEffect::CompositeReplace, 0.0).get()); 28551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) framesSame.append(createDefaultKeyframe(CSSPropertyColor, AnimationEffect::CompositeReplace, 1.0).get()); 286a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch EXPECT_FALSE(isCandidateForAnimationOnCompositor(m_timing, *AnimatableValueKeyframeEffectModel::create(framesSame).get())); 28751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 288a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch AnimatableValueKeyframeVector framesMixedProperties; 28951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) framesMixedProperties.append(createDefaultKeyframe(CSSPropertyOpacity, AnimationEffect::CompositeReplace, 0.0).get()); 29051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) framesMixedProperties.append(createDefaultKeyframe(CSSPropertyColor, AnimationEffect::CompositeReplace, 1.0).get()); 291a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch EXPECT_FALSE(isCandidateForAnimationOnCompositor(m_timing, *AnimatableValueKeyframeEffectModel::create(framesMixedProperties).get())); 29251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 29351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 294197021e6b966cfb06891637935ef33fff06433d1Ben MurdochTEST_F(AnimationCompositorAnimationsTest, AnimatedBoundingBox) 295197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch{ 296197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch Vector<TransformOperations> transformVector; 297197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch transformVector.append(TransformOperations()); 2989e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) transformVector.last().operations().append(TranslateTransformOperation::create(Length(0, Fixed), Length(0, Fixed), 0.0, TransformOperation::Translate3D)); 299197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch transformVector.append(TransformOperations()); 3009e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) transformVector.last().operations().append(TranslateTransformOperation::create(Length(200, Fixed), Length(200, Fixed), 0.0, TransformOperation::Translate3D)); 301197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch OwnPtrWillBePersistent<AnimatableValueKeyframeVector> frames = createCompositableTransformKeyframeVector(transformVector); 302197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch FloatBox bounds; 303197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch EXPECT_TRUE(getAnimationBounds(bounds, *AnimatableValueKeyframeEffectModel::create(*frames).get(), 0, 1)); 304197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch EXPECT_EQ(FloatBox(0.0f, 0.f, 0.0f, 200.0f, 200.0f, 0.0f), bounds); 305197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch bounds = FloatBox(); 306197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch EXPECT_TRUE(getAnimationBounds(bounds, *AnimatableValueKeyframeEffectModel::create(*frames).get(), -1, 1)); 307197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch EXPECT_EQ(FloatBox(-200.0f, -200.0, 0.0, 400.0f, 400.0f, 0.0f), bounds); 308197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch transformVector.append(TransformOperations()); 3099e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) transformVector.last().operations().append(TranslateTransformOperation::create(Length(-300, Fixed), Length(-400, Fixed), 1.0f, TransformOperation::Translate3D)); 310197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch bounds = FloatBox(); 311197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch frames = createCompositableTransformKeyframeVector(transformVector); 312197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch EXPECT_TRUE(getAnimationBounds(bounds, *AnimatableValueKeyframeEffectModel::create(*frames).get(), 0, 1)); 313197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch EXPECT_EQ(FloatBox(-300.0f, -400.f, 0.0f, 500.0f, 600.0f, 1.0f), bounds); 314197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch bounds = FloatBox(); 315197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch EXPECT_TRUE(getAnimationBounds(bounds, *AnimatableValueKeyframeEffectModel::create(*frames).get(), -1, 2)); 316197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch EXPECT_EQ(FloatBox(-1300.0f, -1600.f, 0.0f, 1500.0f, 1800.0f, 3.0f), bounds); 317197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch} 318197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 31951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)TEST_F(AnimationCompositorAnimationsTest, ConvertTimingForCompositorStartDelay) 32051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 32151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.iterationDuration = 20.0; 32251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 32351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.startDelay = 2.0; 324a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming)); 325a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) EXPECT_DOUBLE_EQ(-2.0, m_compositorTiming.scaledTimeOffset); 32651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 32751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.startDelay = -2.0; 32851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming)); 329a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) EXPECT_DOUBLE_EQ(2.0, m_compositorTiming.scaledTimeOffset); 33051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 33151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 33251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)TEST_F(AnimationCompositorAnimationsTest, ConvertTimingForCompositorIterationStart) 33351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 33451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.iterationStart = 2.2; 3357242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming)); 33651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 33751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 33851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)TEST_F(AnimationCompositorAnimationsTest, ConvertTimingForCompositorIterationCount) 33951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 34051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.iterationCount = 5.0; 34151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming)); 34251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(5, m_compositorTiming.adjustedIterationCount); 34351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 34451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.iterationCount = 5.5; 3459e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming)); 3469e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) EXPECT_EQ(5.5, m_compositorTiming.adjustedIterationCount); 34751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 34851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // EXPECT_DEATH tests are flaky on Android. 349197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#if ENABLE(ASSERT) && !OS(ANDROID) 35051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.iterationCount = -1; 35151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_DEATH(convertTimingForCompositor(m_timing, m_compositorTiming), ""); 35251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#endif 35351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 35451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.iterationCount = std::numeric_limits<double>::infinity(); 35551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming)); 35651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(-1, m_compositorTiming.adjustedIterationCount); 35751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 35851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.iterationCount = std::numeric_limits<double>::infinity(); 35951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.iterationDuration = 5.0; 36051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.startDelay = -6.0; 36151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming)); 362a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) EXPECT_DOUBLE_EQ(6.0, m_compositorTiming.scaledTimeOffset); 36351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(-1, m_compositorTiming.adjustedIterationCount); 36451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 36551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 36651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)TEST_F(AnimationCompositorAnimationsTest, ConvertTimingForCompositorIterationsAndStartDelay) 36751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 36851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.iterationCount = 4.0; 36951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.iterationDuration = 5.0; 37051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 371a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) m_timing.startDelay = 6.0; 37251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming)); 373a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) EXPECT_DOUBLE_EQ(-6.0, m_compositorTiming.scaledTimeOffset); 374a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) EXPECT_DOUBLE_EQ(4.0, m_compositorTiming.adjustedIterationCount); 37551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 37651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.startDelay = -6.0; 377a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming)); 378a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) EXPECT_DOUBLE_EQ(6.0, m_compositorTiming.scaledTimeOffset); 379a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) EXPECT_DOUBLE_EQ(4.0, m_compositorTiming.adjustedIterationCount); 38051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 381a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) m_timing.startDelay = 21.0; 38251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_FALSE(convertTimingForCompositor(m_timing, m_compositorTiming)); 38351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 38451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 38551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)TEST_F(AnimationCompositorAnimationsTest, ConvertTimingForCompositorPlaybackRate) 38651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 3877242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_timing.playbackRate = 1.0; 3887242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming)); 3897242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci EXPECT_DOUBLE_EQ(1.0, m_compositorTiming.playbackRate); 39051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 3917242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_timing.playbackRate = -2.3; 3927242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming)); 3937242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci EXPECT_DOUBLE_EQ(-2.3, m_compositorTiming.playbackRate); 39451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 3957242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_timing.playbackRate = 1.6; 3967242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming)); 3977242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci EXPECT_DOUBLE_EQ(1.6, m_compositorTiming.playbackRate); 39851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 39951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 40051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)TEST_F(AnimationCompositorAnimationsTest, ConvertTimingForCompositorDirection) 40151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 4027242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_timing.direction = Timing::PlaybackDirectionNormal; 4037242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming)); 4047242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci EXPECT_EQ(m_compositorTiming.direction, Timing::PlaybackDirectionNormal); 4057242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 40651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.direction = Timing::PlaybackDirectionAlternate; 40751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming)); 4087242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci EXPECT_EQ(m_compositorTiming.direction, Timing::PlaybackDirectionAlternate); 40951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 41051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.direction = Timing::PlaybackDirectionAlternateReverse; 41151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming)); 4127242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci EXPECT_EQ(m_compositorTiming.direction, Timing::PlaybackDirectionAlternateReverse); 41351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 41451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.direction = Timing::PlaybackDirectionReverse; 41551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming)); 4167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci EXPECT_EQ(m_compositorTiming.direction, Timing::PlaybackDirectionReverse); 41751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 41851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 41951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)TEST_F(AnimationCompositorAnimationsTest, ConvertTimingForCompositorDirectionIterationsAndStartDelay) 42051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 42151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.direction = Timing::PlaybackDirectionAlternate; 42251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.iterationCount = 4.0; 42351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.iterationDuration = 5.0; 42451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.startDelay = -6.0; 42551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming)); 426a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) EXPECT_DOUBLE_EQ(6.0, m_compositorTiming.scaledTimeOffset); 427a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) EXPECT_EQ(4, m_compositorTiming.adjustedIterationCount); 4287242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci EXPECT_EQ(m_compositorTiming.direction, Timing::PlaybackDirectionAlternate); 42951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 43051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.direction = Timing::PlaybackDirectionAlternate; 43151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.iterationCount = 4.0; 43251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.iterationDuration = 5.0; 43351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.startDelay = -11.0; 43451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming)); 435a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) EXPECT_DOUBLE_EQ(11.0, m_compositorTiming.scaledTimeOffset); 436a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) EXPECT_EQ(4, m_compositorTiming.adjustedIterationCount); 4377242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci EXPECT_EQ(m_compositorTiming.direction, Timing::PlaybackDirectionAlternate); 43851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 43951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.direction = Timing::PlaybackDirectionAlternateReverse; 44051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.iterationCount = 4.0; 44151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.iterationDuration = 5.0; 44251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.startDelay = -6.0; 44351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming)); 444a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) EXPECT_DOUBLE_EQ(6.0, m_compositorTiming.scaledTimeOffset); 445a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) EXPECT_EQ(4, m_compositorTiming.adjustedIterationCount); 4467242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci EXPECT_EQ(m_compositorTiming.direction, Timing::PlaybackDirectionAlternateReverse); 44751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 44851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.direction = Timing::PlaybackDirectionAlternateReverse; 44951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.iterationCount = 4.0; 45051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.iterationDuration = 5.0; 45151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.startDelay = -11.0; 45251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming)); 453a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) EXPECT_DOUBLE_EQ(11.0, m_compositorTiming.scaledTimeOffset); 454a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) EXPECT_EQ(4, m_compositorTiming.adjustedIterationCount); 4557242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci EXPECT_EQ(m_compositorTiming.direction, Timing::PlaybackDirectionAlternateReverse); 45651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 45751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 458a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)TEST_F(AnimationCompositorAnimationsTest, isCandidateForAnimationOnCompositorTimingTimingFunctionPassThru) 45951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 46051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.timingFunction = m_stepTimingFunction; 461a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) EXPECT_FALSE(isCandidateForAnimationOnCompositor(m_timing, *m_keyframeAnimationEffect2.get())); 46251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 46351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 464a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)TEST_F(AnimationCompositorAnimationsTest, isCandidateForAnimationOnCompositorTimingFunctionLinear) 46551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 466a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) m_timing.timingFunction = m_linearTimingFunction; 467a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) EXPECT_TRUE(isCandidateForAnimationOnCompositor(m_timing, *m_keyframeAnimationEffect2.get())); 468a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) EXPECT_TRUE(isCandidateForAnimationOnCompositor(m_timing, *m_keyframeAnimationEffect5.get())); 46951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 47051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 471a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)TEST_F(AnimationCompositorAnimationsTest, isCandidateForAnimationOnCompositorTimingFunctionCubic) 47251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 473a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) m_timing.timingFunction = m_cubicEaseTimingFunction; 4747242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci EXPECT_TRUE(isCandidateForAnimationOnCompositor(m_timing, *m_keyframeAnimationEffect2.get())); 475a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) EXPECT_FALSE(isCandidateForAnimationOnCompositor(m_timing, *m_keyframeAnimationEffect5.get())); 47651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 477a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) m_timing.timingFunction = m_cubicCustomTimingFunction; 4787242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci EXPECT_TRUE(isCandidateForAnimationOnCompositor(m_timing, *m_keyframeAnimationEffect2.get())); 479a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) EXPECT_FALSE(isCandidateForAnimationOnCompositor(m_timing, *m_keyframeAnimationEffect5.get())); 48051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 48151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 482a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)TEST_F(AnimationCompositorAnimationsTest, isCandidateForAnimationOnCompositorTimingFunctionSteps) 48351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 484a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) m_timing.timingFunction = m_stepTimingFunction; 485a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) EXPECT_FALSE(isCandidateForAnimationOnCompositor(m_timing, *m_keyframeAnimationEffect2.get())); 486a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) EXPECT_FALSE(isCandidateForAnimationOnCompositor(m_timing, *m_keyframeAnimationEffect5.get())); 48751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 48851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 489a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)TEST_F(AnimationCompositorAnimationsTest, isCandidateForAnimationOnCompositorTimingFunctionChainedLinear) 49051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 491a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) EXPECT_TRUE(isCandidateForAnimationOnCompositor(m_timing, *m_keyframeAnimationEffect2.get())); 492a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) EXPECT_TRUE(isCandidateForAnimationOnCompositor(m_timing, *m_keyframeAnimationEffect5.get())); 49351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 49451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 4957242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciTEST_F(AnimationCompositorAnimationsTest, isCandidateForAnimationOnCompositorNonLinearTimingFunctionOnFirstFrame) 4967242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 4977242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_timing.timingFunction = m_cubicEaseTimingFunction; 4987242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 4997242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci EXPECT_TRUE(isCandidateForAnimationOnCompositor(m_timing, *m_keyframeAnimationEffect2.get())); 5007242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 5017242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci (*m_keyframeVector2)[0]->setEasing(m_cubicEaseTimingFunction.get()); 5027242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_keyframeAnimationEffect2 = AnimatableValueKeyframeEffectModel::create(*m_keyframeVector2); 5037242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci EXPECT_FALSE(isCandidateForAnimationOnCompositor(m_timing, *m_keyframeAnimationEffect2.get())); 5047242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 5057242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 506a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)TEST_F(AnimationCompositorAnimationsTest, isCandidateForAnimationOnCompositorTimingFunctionChainedCubicMatchingOffsets) 50751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 508d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) (*m_keyframeVector2)[0]->setEasing(m_cubicEaseTimingFunction.get()); 509a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch m_keyframeAnimationEffect2 = AnimatableValueKeyframeEffectModel::create(*m_keyframeVector2); 510a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) EXPECT_TRUE(isCandidateForAnimationOnCompositor(m_timing, *m_keyframeAnimationEffect2.get())); 51151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 512d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) (*m_keyframeVector2)[0]->setEasing(m_cubicCustomTimingFunction.get()); 513a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch m_keyframeAnimationEffect2 = AnimatableValueKeyframeEffectModel::create(*m_keyframeVector2); 514a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) EXPECT_TRUE(isCandidateForAnimationOnCompositor(m_timing, *m_keyframeAnimationEffect2.get())); 51551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 516d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) (*m_keyframeVector5)[0]->setEasing(m_cubicEaseTimingFunction.get()); 517d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) (*m_keyframeVector5)[1]->setEasing(m_cubicCustomTimingFunction.get()); 518d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) (*m_keyframeVector5)[2]->setEasing(m_cubicCustomTimingFunction.get()); 519d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) (*m_keyframeVector5)[3]->setEasing(m_cubicCustomTimingFunction.get()); 520a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch m_keyframeAnimationEffect5 = AnimatableValueKeyframeEffectModel::create(*m_keyframeVector5); 521a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) EXPECT_TRUE(isCandidateForAnimationOnCompositor(m_timing, *m_keyframeAnimationEffect5.get())); 52251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 52351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 524a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)TEST_F(AnimationCompositorAnimationsTest, isCandidateForAnimationOnCompositorTimingFunctionMixedGood) 52551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 526d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) (*m_keyframeVector5)[0]->setEasing(m_linearTimingFunction.get()); 527d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) (*m_keyframeVector5)[1]->setEasing(m_cubicEaseTimingFunction.get()); 528d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) (*m_keyframeVector5)[2]->setEasing(m_cubicEaseTimingFunction.get()); 529d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) (*m_keyframeVector5)[3]->setEasing(m_linearTimingFunction.get()); 530a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch m_keyframeAnimationEffect5 = AnimatableValueKeyframeEffectModel::create(*m_keyframeVector5); 531a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) EXPECT_TRUE(isCandidateForAnimationOnCompositor(m_timing, *m_keyframeAnimationEffect5.get())); 53251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 53351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 534a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)TEST_F(AnimationCompositorAnimationsTest, isCandidateForAnimationOnCompositorTimingFunctionWithStepNotOkay) 53551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 536d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) (*m_keyframeVector2)[0]->setEasing(m_stepTimingFunction.get()); 537a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch m_keyframeAnimationEffect2 = AnimatableValueKeyframeEffectModel::create(*m_keyframeVector2); 538a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) EXPECT_FALSE(isCandidateForAnimationOnCompositor(m_timing, *m_keyframeAnimationEffect2.get())); 53951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 540d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) (*m_keyframeVector5)[0]->setEasing(m_stepTimingFunction.get()); 541d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) (*m_keyframeVector5)[1]->setEasing(m_linearTimingFunction.get()); 542d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) (*m_keyframeVector5)[2]->setEasing(m_cubicEaseTimingFunction.get()); 543d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) (*m_keyframeVector5)[3]->setEasing(m_linearTimingFunction.get()); 544a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch m_keyframeAnimationEffect5 = AnimatableValueKeyframeEffectModel::create(*m_keyframeVector5); 545a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) EXPECT_FALSE(isCandidateForAnimationOnCompositor(m_timing, *m_keyframeAnimationEffect5.get())); 54651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 547d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) (*m_keyframeVector5)[0]->setEasing(m_linearTimingFunction.get()); 548d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) (*m_keyframeVector5)[1]->setEasing(m_stepTimingFunction.get()); 549d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) (*m_keyframeVector5)[2]->setEasing(m_cubicEaseTimingFunction.get()); 550d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) (*m_keyframeVector5)[3]->setEasing(m_linearTimingFunction.get()); 551a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch m_keyframeAnimationEffect5 = AnimatableValueKeyframeEffectModel::create(*m_keyframeVector5); 552a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) EXPECT_FALSE(isCandidateForAnimationOnCompositor(m_timing, *m_keyframeAnimationEffect5.get())); 55351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 554d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) (*m_keyframeVector5)[0]->setEasing(m_linearTimingFunction.get()); 555d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) (*m_keyframeVector5)[1]->setEasing(m_cubicEaseTimingFunction.get()); 556d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) (*m_keyframeVector5)[2]->setEasing(m_cubicEaseTimingFunction.get()); 557d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) (*m_keyframeVector5)[3]->setEasing(m_stepTimingFunction.get()); 558a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch m_keyframeAnimationEffect5 = AnimatableValueKeyframeEffectModel::create(*m_keyframeVector5); 559a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) EXPECT_FALSE(isCandidateForAnimationOnCompositor(m_timing, *m_keyframeAnimationEffect5.get())); 56051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 56151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 562a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)TEST_F(AnimationCompositorAnimationsTest, isCandidateForAnimationOnCompositor) 56351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 56451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) Timing linearTiming(createCompositableTiming()); 56551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 566a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch AnimatableValueKeyframeVector basicFramesVector; 56751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) basicFramesVector.append(createDefaultKeyframe(CSSPropertyOpacity, AnimationEffect::CompositeReplace, 0.0).get()); 56851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) basicFramesVector.append(createDefaultKeyframe(CSSPropertyOpacity, AnimationEffect::CompositeReplace, 1.0).get()); 56951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 570a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch AnimatableValueKeyframeVector nonBasicFramesVector; 57151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) nonBasicFramesVector.append(createDefaultKeyframe(CSSPropertyOpacity, AnimationEffect::CompositeReplace, 0.0).get()); 57251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) nonBasicFramesVector.append(createDefaultKeyframe(CSSPropertyOpacity, AnimationEffect::CompositeReplace, 0.5).get()); 57351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) nonBasicFramesVector.append(createDefaultKeyframe(CSSPropertyOpacity, AnimationEffect::CompositeReplace, 1.0).get()); 57451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 575d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) basicFramesVector[0]->setEasing(m_linearTimingFunction.get()); 576a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtrWillBeRawPtr<AnimatableValueKeyframeEffectModel> basicFrames = AnimatableValueKeyframeEffectModel::create(basicFramesVector).get(); 577d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) EXPECT_TRUE(isCandidateForAnimationOnCompositor(linearTiming, *basicFrames.get())); 578d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 579d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) basicFramesVector[0]->setEasing(CubicBezierTimingFunction::preset(CubicBezierTimingFunction::EaseIn)); 580a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch basicFrames = AnimatableValueKeyframeEffectModel::create(basicFramesVector).get(); 581d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) EXPECT_TRUE(isCandidateForAnimationOnCompositor(linearTiming, *basicFrames.get())); 582d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 583d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) nonBasicFramesVector[0]->setEasing(m_linearTimingFunction.get()); 584d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) nonBasicFramesVector[1]->setEasing(CubicBezierTimingFunction::preset(CubicBezierTimingFunction::EaseIn)); 585a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtrWillBeRawPtr<AnimatableValueKeyframeEffectModel> nonBasicFrames = AnimatableValueKeyframeEffectModel::create(nonBasicFramesVector).get(); 5867242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci EXPECT_TRUE(CompositorAnimations::instance()->isCandidateForAnimationOnCompositor(linearTiming, *nonBasicFrames.get(), 1)); 58751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 58851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 58951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)// ----------------------------------------------------------------------- 59051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)// ----------------------------------------------------------------------- 59151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 59251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)TEST_F(AnimationCompositorAnimationsTest, createSimpleOpacityAnimation) 59351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 59451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // Animation to convert 595a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtrWillBeRawPtr<AnimatableValueKeyframeEffectModel> effect = createKeyframeEffectModel( 59651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(2.0).get(), 0), 59751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0).get(), 1.0)); 59851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // -- 59951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 60051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) WebCompositorSupportMock mockCompositor; 60151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 60251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // Curve is created 6039e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) WebFloatAnimationCurveMock* mockCurvePtr = new WebFloatAnimationCurveMock; 60451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) ExpectationSet usesMockCurve; 60551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_CALL(mockCompositor, createFloatAnimationCurve()) 60651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .WillOnce(Return(mockCurvePtr)); 60751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 6089e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(WebFloatKeyframe(0.0, 2.0), WebCompositorAnimationCurve::TimingFunctionTypeLinear)); 6099e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(WebFloatKeyframe(1.0, 5.0))); 61051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 61151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // Create animation 6129e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) WebCompositorAnimationMock* mockAnimationPtr = new WebCompositorAnimationMock(WebCompositorAnimation::TargetPropertyOpacity); 61351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) ExpectationSet usesMockAnimation; 61451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 6159e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) usesMockCurve += EXPECT_CALL(mockCompositor, createAnimation(Ref(*mockCurvePtr), WebCompositorAnimation::TargetPropertyOpacity, _)) 61651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .WillOnce(Return(mockAnimationPtr)); 61751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 61851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(1)); 61951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(0.0)); 6207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setDirection(blink::WebCompositorAnimation::DirectionNormal)); 6217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setPlaybackRate(1)); 62251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 62351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_CALL(*mockAnimationPtr, delete_()) 62451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .Times(1) 62551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .After(usesMockAnimation); 62651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_CALL(*mockCurvePtr, delete_()) 62751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .Times(1) 62851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .After(usesMockCurve); 62951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 63051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // Go! 63151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) setCompositorForTesting(mockCompositor); 6329e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) Vector<OwnPtr<WebCompositorAnimation> > result; 63351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) getAnimationOnCompositor(m_timing, *effect.get(), result); 63451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(1U, result.size()); 63551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) result[0].clear(); 63651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 63751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 63851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)TEST_F(AnimationCompositorAnimationsTest, createSimpleOpacityAnimationDuration) 63951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 64051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // Animation to convert 641a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtrWillBeRawPtr<AnimatableValueKeyframeEffectModel> effect = createKeyframeEffectModel( 64251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(2.0).get(), 0), 64351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0).get(), 1.0)); 64451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 64551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.iterationDuration = 10.0; 64651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // -- 64751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 64851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) WebCompositorSupportMock mockCompositor; 64951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 65051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // Curve is created 6519e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) WebFloatAnimationCurveMock* mockCurvePtr = new WebFloatAnimationCurveMock; 65251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) ExpectationSet usesMockCurve; 65351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_CALL(mockCompositor, createFloatAnimationCurve()) 65451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .WillOnce(Return(mockCurvePtr)); 65551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 6569e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(WebFloatKeyframe(0.0, 2.0), WebCompositorAnimationCurve::TimingFunctionTypeLinear)); 6579e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(WebFloatKeyframe(10.0, 5.0))); 65851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 65951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // Create animation 6609e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) WebCompositorAnimationMock* mockAnimationPtr = new WebCompositorAnimationMock(WebCompositorAnimation::TargetPropertyOpacity); 66151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) ExpectationSet usesMockAnimation; 66251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 6639e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) usesMockCurve += EXPECT_CALL(mockCompositor, createAnimation(Ref(*mockCurvePtr), WebCompositorAnimation::TargetPropertyOpacity, _)) 66451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .WillOnce(Return(mockAnimationPtr)); 66551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 66651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(1)); 66751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(0.0)); 6687242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setDirection(blink::WebCompositorAnimation::DirectionNormal)); 6697242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setPlaybackRate(1)); 67051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 67151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_CALL(*mockAnimationPtr, delete_()) 67251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .Times(1) 67351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .After(usesMockAnimation); 67451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_CALL(*mockCurvePtr, delete_()) 67551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .Times(1) 67651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .After(usesMockCurve); 67751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 67851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // Go! 67951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) setCompositorForTesting(mockCompositor); 6809e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) Vector<OwnPtr<WebCompositorAnimation> > result; 68151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) getAnimationOnCompositor(m_timing, *effect.get(), result); 68251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(1U, result.size()); 68351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) result[0].clear(); 68451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 68551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 68651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)TEST_F(AnimationCompositorAnimationsTest, createMultipleKeyframeOpacityAnimationLinear) 68751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 68851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // Animation to convert 689a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtrWillBeRawPtr<AnimatableValueKeyframeEffectModel> effect = createKeyframeEffectModel( 69051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(2.0).get(), 0), 69151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(-1.0).get(), 0.25), 69251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(20.0).get(), 0.5), 69351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0).get(), 1.0)); 69451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 69551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.iterationCount = 5; 69651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.direction = Timing::PlaybackDirectionAlternate; 6977242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_timing.playbackRate = 2.0; 69851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // -- 69951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 70051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) WebCompositorSupportMock mockCompositor; 70151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 70251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // Curve is created 7039e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) WebFloatAnimationCurveMock* mockCurvePtr = new WebFloatAnimationCurveMock(); 70451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) ExpectationSet usesMockCurve; 70551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 70651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_CALL(mockCompositor, createFloatAnimationCurve()) 70751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .WillOnce(Return(mockCurvePtr)); 70851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 7099e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(WebFloatKeyframe(0.0, 2.0), WebCompositorAnimationCurve::TimingFunctionTypeLinear)); 7109e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(WebFloatKeyframe(0.25, -1.0), WebCompositorAnimationCurve::TimingFunctionTypeLinear)); 7119e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(WebFloatKeyframe(0.5, 20.0), WebCompositorAnimationCurve::TimingFunctionTypeLinear)); 7129e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(WebFloatKeyframe(1.0, 5.0))); 71351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 71451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // Animation is created 7159e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) WebCompositorAnimationMock* mockAnimationPtr = new WebCompositorAnimationMock(WebCompositorAnimation::TargetPropertyOpacity); 71651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) ExpectationSet usesMockAnimation; 71751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 7189e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) usesMockCurve += EXPECT_CALL(mockCompositor, createAnimation(Ref(*mockCurvePtr), WebCompositorAnimation::TargetPropertyOpacity, _)) 71951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .WillOnce(Return(mockAnimationPtr)); 72051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 72151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(5)); 72251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(0.0)); 7237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setDirection(blink::WebCompositorAnimation::DirectionAlternate)); 7247242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setPlaybackRate(2.0)); 72551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 72651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_CALL(*mockAnimationPtr, delete_()) 72751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .Times(1) 72851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .After(usesMockAnimation); 72951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_CALL(*mockCurvePtr, delete_()) 73051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .Times(1) 73151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .After(usesMockCurve); 73251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 73351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // Go! 73451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) setCompositorForTesting(mockCompositor); 7359e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) Vector<OwnPtr<WebCompositorAnimation> > result; 73651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) getAnimationOnCompositor(m_timing, *effect.get(), result); 73751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(1U, result.size()); 73851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) result[0].clear(); 73951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 74051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 741a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)TEST_F(AnimationCompositorAnimationsTest, createSimpleOpacityAnimationStartDelay) 74251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 74351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // Animation to convert 744a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtrWillBeRawPtr<AnimatableValueKeyframeEffectModel> effect = createKeyframeEffectModel( 74551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(2.0).get(), 0), 74651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0).get(), 1.0)); 74751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 74851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.iterationCount = 5.0; 74951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.iterationDuration = 1.75; 750a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) m_timing.startDelay = 3.25; 75151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // -- 75251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 75351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) WebCompositorSupportMock mockCompositor; 75451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 75551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // Curve is created 7569e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) WebFloatAnimationCurveMock* mockCurvePtr = new WebFloatAnimationCurveMock; 75751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) ExpectationSet usesMockCurve; 75851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_CALL(mockCompositor, createFloatAnimationCurve()) 75951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .WillOnce(Return(mockCurvePtr)); 76051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 7619e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(WebFloatKeyframe(0.0, 2.0), WebCompositorAnimationCurve::TimingFunctionTypeLinear)); 7629e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(WebFloatKeyframe(1.75, 5.0))); 76351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 76451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // Create animation 7659e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) WebCompositorAnimationMock* mockAnimationPtr = new WebCompositorAnimationMock(WebCompositorAnimation::TargetPropertyOpacity); 76651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) ExpectationSet usesMockAnimation; 76751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 7689e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) usesMockCurve += EXPECT_CALL(mockCompositor, createAnimation(Ref(*mockCurvePtr), WebCompositorAnimation::TargetPropertyOpacity, _)) 76951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .WillOnce(Return(mockAnimationPtr)); 77051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 771a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(5)); 772a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(-3.25)); 7737242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setDirection(blink::WebCompositorAnimation::DirectionNormal)); 7747242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setPlaybackRate(1)); 77551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 77651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_CALL(*mockAnimationPtr, delete_()) 77751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .Times(1) 77851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .After(usesMockAnimation); 77951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_CALL(*mockCurvePtr, delete_()) 78051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .Times(1) 78151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .After(usesMockCurve); 78251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 78351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // Go! 78451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) setCompositorForTesting(mockCompositor); 7859e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) Vector<OwnPtr<WebCompositorAnimation> > result; 78651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) getAnimationOnCompositor(m_timing, *effect.get(), result); 78751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(1U, result.size()); 78851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) result[0].clear(); 78951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 79051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 79151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)TEST_F(AnimationCompositorAnimationsTest, createMultipleKeyframeOpacityAnimationChained) 79251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 79351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // Animation to convert 794a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch AnimatableValueKeyframeVector frames; 795d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) frames.append(createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(2.0).get(), 0)); 796d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) frames.append(createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(-1.0).get(), 0.25)); 797d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) frames.append(createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(20.0).get(), 0.5)); 798d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) frames.append(createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0).get(), 1.0)); 799d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) frames[0]->setEasing(m_cubicEaseTimingFunction.get()); 800d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) frames[1]->setEasing(m_linearTimingFunction.get()); 801d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) frames[2]->setEasing(m_cubicCustomTimingFunction.get()); 802a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtrWillBeRawPtr<AnimatableValueKeyframeEffectModel> effect = AnimatableValueKeyframeEffectModel::create(frames); 803d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 804d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) m_timing.timingFunction = m_linearTimingFunction.get(); 80551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.iterationDuration = 2.0; 80651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.iterationCount = 10; 80751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.direction = Timing::PlaybackDirectionAlternate; 80851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // -- 80951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 81051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) WebCompositorSupportMock mockCompositor; 81151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 81251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // Curve is created 8139e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) WebFloatAnimationCurveMock* mockCurvePtr = new WebFloatAnimationCurveMock(); 81451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) ExpectationSet usesMockCurve; 81551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 81651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_CALL(mockCompositor, createFloatAnimationCurve()) 81751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .WillOnce(Return(mockCurvePtr)); 81851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 8199e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(WebFloatKeyframe(0.0, 2.0), WebCompositorAnimationCurve::TimingFunctionTypeEase)); 8209e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(WebFloatKeyframe(0.5, -1.0), WebCompositorAnimationCurve::TimingFunctionTypeLinear)); 8219e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(WebFloatKeyframe(1.0, 20.0), 1.0, 2.0, 3.0, 4.0)); 8229e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(WebFloatKeyframe(2.0, 5.0))); 82351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 82451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // Animation is created 8259e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) WebCompositorAnimationMock* mockAnimationPtr = new WebCompositorAnimationMock(WebCompositorAnimation::TargetPropertyOpacity); 82651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) ExpectationSet usesMockAnimation; 82751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 8289e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) usesMockCurve += EXPECT_CALL(mockCompositor, createAnimation(Ref(*mockCurvePtr), WebCompositorAnimation::TargetPropertyOpacity, _)) 82951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .WillOnce(Return(mockAnimationPtr)); 83051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 83151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(10)); 83251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(0.0)); 8337242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setDirection(blink::WebCompositorAnimation::DirectionAlternate)); 8347242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setPlaybackRate(1)); 83551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 83651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_CALL(*mockAnimationPtr, delete_()) 83751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .Times(1) 83851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .After(usesMockAnimation); 83951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_CALL(*mockCurvePtr, delete_()) 84051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .Times(1) 84151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .After(usesMockCurve); 84251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 84351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // Go! 84451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) setCompositorForTesting(mockCompositor); 8459e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) Vector<OwnPtr<WebCompositorAnimation> > result; 84651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) getAnimationOnCompositor(m_timing, *effect.get(), result); 84751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(1U, result.size()); 84851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) result[0].clear(); 84951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 85051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 85151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)TEST_F(AnimationCompositorAnimationsTest, createReversedOpacityAnimation) 85251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 85351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) RefPtr<TimingFunction> cubicEasyFlipTimingFunction = CubicBezierTimingFunction::create(0.0, 0.0, 0.0, 1.0); 85451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 855d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) // Animation to convert 856a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch AnimatableValueKeyframeVector frames; 857d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) frames.append(createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(2.0).get(), 0)); 858d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) frames.append(createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(-1.0).get(), 0.25)); 859d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) frames.append(createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(20.0).get(), 0.5)); 860d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) frames.append(createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0).get(), 1.0)); 861d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) frames[0]->setEasing(CubicBezierTimingFunction::preset(CubicBezierTimingFunction::EaseIn)); 862d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) frames[1]->setEasing(m_linearTimingFunction.get()); 863d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) frames[2]->setEasing(cubicEasyFlipTimingFunction.get()); 864a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtrWillBeRawPtr<AnimatableValueKeyframeEffectModel> effect = AnimatableValueKeyframeEffectModel::create(frames); 865d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 866d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) m_timing.timingFunction = m_linearTimingFunction.get(); 86751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.iterationCount = 10; 86851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.direction = Timing::PlaybackDirectionAlternateReverse; 86951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // -- 87051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 87151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) WebCompositorSupportMock mockCompositor; 87251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 87351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // Curve is created 8749e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) WebFloatAnimationCurveMock* mockCurvePtr = new WebFloatAnimationCurveMock(); 87551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) ExpectationSet usesMockCurve; 87651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 87751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_CALL(mockCompositor, createFloatAnimationCurve()) 87851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .WillOnce(Return(mockCurvePtr)); 87951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 8807242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(0.0, 2.0), blink::WebCompositorAnimationCurve::TimingFunctionTypeEaseIn)); 8817242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(0.25, -1.0), blink::WebCompositorAnimationCurve::TimingFunctionTypeLinear)); 8827242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(0.5, 20.0), 0.0, 0.0, 0.0, 1.0)); 8837242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(1.0, 5.0))); 88451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 88551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // Create the animation 8869e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) WebCompositorAnimationMock* mockAnimationPtr = new WebCompositorAnimationMock(WebCompositorAnimation::TargetPropertyOpacity); 88751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) ExpectationSet usesMockAnimation; 88851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 8899e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) usesMockCurve += EXPECT_CALL(mockCompositor, createAnimation(Ref(*mockCurvePtr), WebCompositorAnimation::TargetPropertyOpacity, _)) 89051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .WillOnce(Return(mockAnimationPtr)); 89151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 89251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(10)); 89351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(0.0)); 8947242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setDirection(blink::WebCompositorAnimation::DirectionAlternateReverse)); 8957242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setPlaybackRate(1)); 89651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 89751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_CALL(*mockAnimationPtr, delete_()) 89851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .Times(1) 89951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .After(usesMockAnimation); 90051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_CALL(*mockCurvePtr, delete_()) 90151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .Times(1) 90251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .After(usesMockCurve); 90351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 90451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // Go! 90551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) setCompositorForTesting(mockCompositor); 9069e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) Vector<OwnPtr<WebCompositorAnimation> > result; 90751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) getAnimationOnCompositor(m_timing, *effect.get(), result); 90851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(1U, result.size()); 90951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) result[0].clear(); 91051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 91151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 91251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)TEST_F(AnimationCompositorAnimationsTest, createReversedOpacityAnimationNegativeStartDelay) 91351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 91451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // Animation to convert 915a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtrWillBeRawPtr<AnimatableValueKeyframeEffectModel> effect = createKeyframeEffectModel( 91651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(2.0).get(), 0), 91751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0).get(), 1.0)); 91851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 91951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.iterationCount = 5.0; 920a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) m_timing.iterationDuration = 1.5; 92151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.startDelay = -3; 92251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_timing.direction = Timing::PlaybackDirectionAlternateReverse; 92351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // -- 92451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 92551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) WebCompositorSupportMock mockCompositor; 92651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 92751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // Curve is created 9289e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) WebFloatAnimationCurveMock* mockCurvePtr = new WebFloatAnimationCurveMock; 92951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) ExpectationSet usesMockCurve; 93051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_CALL(mockCompositor, createFloatAnimationCurve()) 93151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .WillOnce(Return(mockCurvePtr)); 93251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 9337242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(0.0, 2.0), blink::WebCompositorAnimationCurve::TimingFunctionTypeLinear)); 9347242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(blink::WebFloatKeyframe(1.5, 5.0))); 93551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 93651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // Create animation 9379e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) WebCompositorAnimationMock* mockAnimationPtr = new WebCompositorAnimationMock(WebCompositorAnimation::TargetPropertyOpacity); 93851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) ExpectationSet usesMockAnimation; 93951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 9409e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) usesMockCurve += EXPECT_CALL(mockCompositor, createAnimation(Ref(*mockCurvePtr), WebCompositorAnimation::TargetPropertyOpacity, _)) 94151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .WillOnce(Return(mockAnimationPtr)); 94251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 943a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(5)); 944a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(3.0)); 9457242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setDirection(blink::WebCompositorAnimation::DirectionAlternateReverse)); 9467242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setPlaybackRate(1)); 94751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 94851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_CALL(*mockAnimationPtr, delete_()) 94951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .Times(1) 95051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .After(usesMockAnimation); 95151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_CALL(*mockCurvePtr, delete_()) 95251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .Times(1) 95351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) .After(usesMockCurve); 95451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 95551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // Go! 95651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) setCompositorForTesting(mockCompositor); 9579e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) Vector<OwnPtr<WebCompositorAnimation> > result; 95851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) getAnimationOnCompositor(m_timing, *effect.get(), result); 95951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(1U, result.size()); 96051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) result[0].clear(); 96151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 96251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 9637242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciTEST_F(AnimationCompositorAnimationsTest, createSimpleOpacityAnimationPlaybackRates) 9647242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 9657242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // Animation to convert 9667242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci RefPtrWillBeRawPtr<AnimatableValueKeyframeEffectModel> effect = createKeyframeEffectModel( 9677242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(2.0).get(), 0), 9687242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0).get(), 1.0)); 9697242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 9707242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_timing.playbackRate = 2; 9717242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // -- 9727242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 9737242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci WebCompositorSupportMock mockCompositor; 9747242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 9757242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // Curve is created 9767242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci WebFloatAnimationCurveMock* mockCurvePtr = new WebFloatAnimationCurveMock; 9777242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ExpectationSet usesMockCurve; 9787242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci EXPECT_CALL(mockCompositor, createFloatAnimationCurve()) 9797242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci .WillOnce(Return(mockCurvePtr)); 9807242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 9817242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(WebFloatKeyframe(0.0, 2.0), WebCompositorAnimationCurve::TimingFunctionTypeLinear)); 9827242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(WebFloatKeyframe(1.0, 5.0))); 9837242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 9847242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // Create animation 9857242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci WebCompositorAnimationMock* mockAnimationPtr = new WebCompositorAnimationMock(WebCompositorAnimation::TargetPropertyOpacity); 9867242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ExpectationSet usesMockAnimation; 9877242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 9887242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockCurve += EXPECT_CALL(mockCompositor, createAnimation(Ref(*mockCurvePtr), WebCompositorAnimation::TargetPropertyOpacity, _)) 9897242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci .WillOnce(Return(mockAnimationPtr)); 9907242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 9917242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(1)); 9927242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(0.0)); 9937242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setDirection(blink::WebCompositorAnimation::DirectionNormal)); 9947242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setPlaybackRate(-3)); 9957242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 9967242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci EXPECT_CALL(*mockAnimationPtr, delete_()) 9977242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci .Times(1) 9987242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci .After(usesMockAnimation); 9997242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci EXPECT_CALL(*mockCurvePtr, delete_()) 10007242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci .Times(1) 10017242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci .After(usesMockCurve); 10027242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 10037242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // Go! 10047242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci setCompositorForTesting(mockCompositor); 10057242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci Vector<OwnPtr<WebCompositorAnimation> > result; 10067242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // Set player plaback rate also 10077242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci getAnimationOnCompositor(m_timing, *effect.get(), result, -1.5); 10087242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci EXPECT_EQ(1U, result.size()); 10097242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci result[0].clear(); 10107242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 10117242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 10127242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciTEST_F(AnimationCompositorAnimationsTest, createSimpleOpacityAnimationFillModeNone) 10137242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 10147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // Animation to convert 10157242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci RefPtrWillBeRawPtr<AnimatableValueKeyframeEffectModel> effect = createKeyframeEffectModel( 10167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(2.0).get(), 0), 10177242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0).get(), 1.0)); 10187242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 10197242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_timing.fillMode = Timing::FillModeNone; 10207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 10217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci WebCompositorSupportMock mockCompositor; 10227242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 10237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // Curve is created 10247242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci WebFloatAnimationCurveMock* mockCurvePtr = new WebFloatAnimationCurveMock; 10257242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ExpectationSet usesMockCurve; 10267242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci EXPECT_CALL(mockCompositor, createFloatAnimationCurve()) 10277242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci .WillOnce(Return(mockCurvePtr)); 10287242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 10297242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(WebFloatKeyframe(0.0, 2.0), WebCompositorAnimationCurve::TimingFunctionTypeLinear)); 10307242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(WebFloatKeyframe(1.0, 5.0))); 10317242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 10327242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // Create animation 10337242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci WebCompositorAnimationMock* mockAnimationPtr = new WebCompositorAnimationMock(WebCompositorAnimation::TargetPropertyOpacity); 10347242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ExpectationSet usesMockAnimation; 10357242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 10367242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockCurve += EXPECT_CALL(mockCompositor, createAnimation(Ref(*mockCurvePtr), WebCompositorAnimation::TargetPropertyOpacity, _)) 10377242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci .WillOnce(Return(mockAnimationPtr)); 10387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 10397242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(1)); 10407242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(0.0)); 10417242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setDirection(blink::WebCompositorAnimation::DirectionNormal)); 10427242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setPlaybackRate(1)); 10437242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setFillMode(blink::WebCompositorAnimation::FillModeNone)); 10447242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 10457242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci EXPECT_CALL(*mockAnimationPtr, delete_()) 10467242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci .Times(1) 10477242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci .After(usesMockAnimation); 10487242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci EXPECT_CALL(*mockCurvePtr, delete_()) 10497242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci .Times(1) 10507242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci .After(usesMockCurve); 10517242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 10527242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // Go! 10537242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci setCompositorForTesting(mockCompositor); 10547242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci Vector<OwnPtr<WebCompositorAnimation> > result; 10557242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci getAnimationOnCompositor(m_timing, *effect.get(), result); 10567242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci EXPECT_EQ(1U, result.size()); 10577242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci result[0].clear(); 10587242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 10597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 10607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciTEST_F(AnimationCompositorAnimationsTest, createSimpleOpacityAnimationFillModeAuto) 10617242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 10627242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // Animation to convert 10637242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci RefPtrWillBeRawPtr<AnimatableValueKeyframeEffectModel> effect = createKeyframeEffectModel( 10647242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(2.0).get(), 0), 10657242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0).get(), 1.0)); 10667242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 10677242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_timing.fillMode = Timing::FillModeAuto; 10687242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 10697242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci WebCompositorSupportMock mockCompositor; 10707242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 10717242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // Curve is created 10727242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci WebFloatAnimationCurveMock* mockCurvePtr = new WebFloatAnimationCurveMock; 10737242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ExpectationSet usesMockCurve; 10747242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci EXPECT_CALL(mockCompositor, createFloatAnimationCurve()) 10757242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci .WillOnce(Return(mockCurvePtr)); 10767242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 10777242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(WebFloatKeyframe(0.0, 2.0), WebCompositorAnimationCurve::TimingFunctionTypeLinear)); 10787242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockCurve += EXPECT_CALL(*mockCurvePtr, add(WebFloatKeyframe(1.0, 5.0))); 10797242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 10807242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // Create animation 10817242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci WebCompositorAnimationMock* mockAnimationPtr = new WebCompositorAnimationMock(WebCompositorAnimation::TargetPropertyOpacity); 10827242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ExpectationSet usesMockAnimation; 10837242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 10847242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockCurve += EXPECT_CALL(mockCompositor, createAnimation(Ref(*mockCurvePtr), WebCompositorAnimation::TargetPropertyOpacity, _)) 10857242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci .WillOnce(Return(mockAnimationPtr)); 10867242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 10877242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setIterations(1)); 10887242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setTimeOffset(0.0)); 10897242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setDirection(blink::WebCompositorAnimation::DirectionNormal)); 10907242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setPlaybackRate(1)); 10917242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci usesMockAnimation += EXPECT_CALL(*mockAnimationPtr, setFillMode(blink::WebCompositorAnimation::FillModeNone)); 10927242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 10937242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci EXPECT_CALL(*mockAnimationPtr, delete_()) 10947242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci .Times(1) 10957242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci .After(usesMockAnimation); 10967242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci EXPECT_CALL(*mockCurvePtr, delete_()) 10977242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci .Times(1) 10987242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci .After(usesMockCurve); 10997242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 11007242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // Go! 11017242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci setCompositorForTesting(mockCompositor); 11027242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci Vector<OwnPtr<WebCompositorAnimation> > result; 11037242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci getAnimationOnCompositor(m_timing, *effect.get(), result); 11047242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci EXPECT_EQ(1U, result.size()); 11057242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci result[0].clear(); 11067242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 110751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 1108c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 1109