OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "core/animation/AnimationStack.h" | 5 #include "core/animation/AnimationStack.h" |
6 | 6 |
7 #include "core/animation/AnimationClock.h" | 7 #include "core/animation/AnimationClock.h" |
8 #include "core/animation/AnimationTimeline.h" | 8 #include "core/animation/AnimationTimeline.h" |
9 #include "core/animation/ElementAnimations.h" | 9 #include "core/animation/ElementAnimations.h" |
10 #include "core/animation/KeyframeEffectModel.h" | 10 #include "core/animation/KeyframeEffectModel.h" |
(...skipping 22 matching lines...) Expand all Loading... |
33 animation->update(TimingUpdateOnDemand); | 33 animation->update(TimingUpdateOnDemand); |
34 return animation; | 34 return animation; |
35 } | 35 } |
36 | 36 |
37 void updateTimeline(double time) | 37 void updateTimeline(double time) |
38 { | 38 { |
39 document->animationClock().updateTime(document->timeline().zeroTime() +
time); | 39 document->animationClock().updateTime(document->timeline().zeroTime() +
time); |
40 timeline->serviceAnimations(TimingUpdateForAnimationFrame); | 40 timeline->serviceAnimations(TimingUpdateForAnimationFrame); |
41 } | 41 } |
42 | 42 |
| 43 size_t sampledEffectCount() |
| 44 { |
| 45 return element->ensureElementAnimations().animationStack().m_sampledEffe
cts.size(); |
| 46 } |
| 47 |
43 EffectModel* makeEffectModel(CSSPropertyID id, PassRefPtr<AnimatableValue> v
alue) | 48 EffectModel* makeEffectModel(CSSPropertyID id, PassRefPtr<AnimatableValue> v
alue) |
44 { | 49 { |
45 AnimatableValueKeyframeVector keyframes(2); | 50 AnimatableValueKeyframeVector keyframes(2); |
46 keyframes[0] = AnimatableValueKeyframe::create(); | 51 keyframes[0] = AnimatableValueKeyframe::create(); |
47 keyframes[0]->setOffset(0.0); | 52 keyframes[0]->setOffset(0.0); |
48 keyframes[0]->setPropertyValue(id, value.get()); | 53 keyframes[0]->setPropertyValue(id, value.get()); |
49 keyframes[1] = AnimatableValueKeyframe::create(); | 54 keyframes[1] = AnimatableValueKeyframe::create(); |
50 keyframes[1]->setOffset(1.0); | 55 keyframes[1]->setOffset(1.0); |
51 keyframes[1]->setPropertyValue(id, value.get()); | 56 keyframes[1]->setPropertyValue(id, value.get()); |
52 return AnimatableValueKeyframeEffectModel::create(keyframes); | 57 return AnimatableValueKeyframeEffectModel::create(keyframes); |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
120 Animation* animation = play(makeKeyframeEffect(makeEffectModel(CSSPropertyFo
ntSize, AnimatableDouble::create(1))), 10); | 125 Animation* animation = play(makeKeyframeEffect(makeEffectModel(CSSPropertyFo
ntSize, AnimatableDouble::create(1))), 10); |
121 ActiveInterpolationsMap result = AnimationStack::activeInterpolations(&eleme
nt->elementAnimations()->animationStack(), 0, 0, KeyframeEffect::DefaultPriority
); | 126 ActiveInterpolationsMap result = AnimationStack::activeInterpolations(&eleme
nt->elementAnimations()->animationStack(), 0, 0, KeyframeEffect::DefaultPriority
); |
122 EXPECT_EQ(1u, result.size()); | 127 EXPECT_EQ(1u, result.size()); |
123 EXPECT_TRUE(interpolationValue(result, CSSPropertyFontSize)->equals(Animatab
leDouble::create(1).get())); | 128 EXPECT_TRUE(interpolationValue(result, CSSPropertyFontSize)->equals(Animatab
leDouble::create(1).get())); |
124 | 129 |
125 animation->setEffect(0); | 130 animation->setEffect(0); |
126 result = AnimationStack::activeInterpolations(&element->elementAnimations()-
>animationStack(), 0, 0, KeyframeEffect::DefaultPriority); | 131 result = AnimationStack::activeInterpolations(&element->elementAnimations()-
>animationStack(), 0, 0, KeyframeEffect::DefaultPriority); |
127 EXPECT_EQ(0u, result.size()); | 132 EXPECT_EQ(0u, result.size()); |
128 } | 133 } |
129 | 134 |
| 135 TEST_F(AnimationAnimationStackTest, ForwardsFillDiscarding) |
| 136 { |
| 137 play(makeKeyframeEffect(makeEffectModel(CSSPropertyFontSize, AnimatableDoubl
e::create(1))), 2); |
| 138 play(makeKeyframeEffect(makeEffectModel(CSSPropertyFontSize, AnimatableDoubl
e::create(2))), 6); |
| 139 play(makeKeyframeEffect(makeEffectModel(CSSPropertyFontSize, AnimatableDoubl
e::create(3))), 4); |
| 140 document->compositorPendingAnimations().update(); |
| 141 ActiveInterpolationsMap interpolations; |
| 142 |
| 143 updateTimeline(11); |
| 144 Heap::collectAllGarbage(); |
| 145 interpolations = AnimationStack::activeInterpolations(&element->elementAnima
tions()->animationStack(), nullptr, nullptr, KeyframeEffect::DefaultPriority); |
| 146 EXPECT_EQ(1u, interpolations.size()); |
| 147 EXPECT_TRUE(interpolationValue(interpolations, CSSPropertyFontSize)->equals(
AnimatableDouble::create(3).get())); |
| 148 EXPECT_EQ(3u, sampledEffectCount()); |
| 149 |
| 150 updateTimeline(13); |
| 151 Heap::collectAllGarbage(); |
| 152 interpolations = AnimationStack::activeInterpolations(&element->elementAnima
tions()->animationStack(), nullptr, nullptr, KeyframeEffect::DefaultPriority); |
| 153 EXPECT_EQ(1u, interpolations.size()); |
| 154 EXPECT_TRUE(interpolationValue(interpolations, CSSPropertyFontSize)->equals(
AnimatableDouble::create(3).get())); |
| 155 EXPECT_EQ(3u, sampledEffectCount()); |
| 156 |
| 157 updateTimeline(15); |
| 158 Heap::collectAllGarbage(); |
| 159 interpolations = AnimationStack::activeInterpolations(&element->elementAnima
tions()->animationStack(), nullptr, nullptr, KeyframeEffect::DefaultPriority); |
| 160 EXPECT_EQ(1u, interpolations.size()); |
| 161 EXPECT_TRUE(interpolationValue(interpolations, CSSPropertyFontSize)->equals(
AnimatableDouble::create(3).get())); |
| 162 EXPECT_EQ(2u, sampledEffectCount()); |
| 163 |
| 164 updateTimeline(17); |
| 165 Heap::collectAllGarbage(); |
| 166 interpolations = AnimationStack::activeInterpolations(&element->elementAnima
tions()->animationStack(), nullptr, nullptr, KeyframeEffect::DefaultPriority); |
| 167 EXPECT_EQ(1u, interpolations.size()); |
| 168 EXPECT_TRUE(interpolationValue(interpolations, CSSPropertyFontSize)->equals(
AnimatableDouble::create(3).get())); |
| 169 EXPECT_EQ(1u, sampledEffectCount()); |
| 170 } |
| 171 |
130 } // namespace blink | 172 } // namespace blink |
OLD | NEW |