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

Side by Side Diff: Source/core/platform/graphics/chromium/AnimationTranslationUtilTest.cpp

Issue 23431021: Refactoring animation code in accelerated path. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Fix typo Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 /*
2 * Copyright (C) 2012 Google Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND AN Y
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
16 * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR AN Y
17 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
18 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
19 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND O N
20 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
22 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23 */
24
25 #include "config.h"
26
27 #include "core/platform/graphics/chromium/AnimationTranslationUtil.h"
28
29 #include "core/platform/animation/CSSAnimationData.h"
30 #include "core/platform/animation/KeyframeValueList.h"
31 #include "core/platform/graphics/IntSize.h"
32 #include "core/platform/graphics/transforms/Matrix3DTransformOperation.h"
33 #include "core/platform/graphics/transforms/RotateTransformOperation.h"
34 #include "core/platform/graphics/transforms/ScaleTransformOperation.h"
35 #include "core/platform/graphics/transforms/TransformOperations.h"
36 #include "core/platform/graphics/transforms/TranslateTransformOperation.h"
37 #include "wtf/RefPtr.h"
38 #include <gtest/gtest.h>
39 #include "public/platform/WebAnimation.h"
40
41 using namespace WebCore;
42 using namespace WebKit;
43
44 namespace {
45
46 bool animationCanBeTranslated(const KeyframeValueList& values, CSSAnimationData* animation)
47 {
48 IntSize boxSize;
49 return createWebAnimation(values, animation, 0, 0, boxSize);
50 }
51
52 TEST(AnimationTranslationUtilTest, createOpacityAnimation)
53 {
54 const double duration = 1;
55 WebCore::KeyframeValueList values(AnimatedPropertyOpacity);
56 values.insert(adoptPtr(new FloatAnimationValue(0, 0)));
57 values.insert(adoptPtr(new FloatAnimationValue(duration, 1)));
58
59 RefPtr<CSSAnimationData> animation = CSSAnimationData::create();
60 animation->setDuration(duration);
61
62 EXPECT_TRUE(animationCanBeTranslated(values, animation.get()));
63 }
64
65 TEST(AnimationTranslationUtilTest, createTransformAnimation)
66 {
67 const double duration = 1;
68 WebCore::KeyframeValueList values(AnimatedPropertyWebkitTransform);
69
70 TransformOperations operations1;
71 operations1.operations().append(TranslateTransformOperation::create(Length(2 , WebCore::Fixed), Length(0, WebCore::Fixed), TransformOperation::TranslateX));
72 values.insert(adoptPtr(new TransformAnimationValue(0, &operations1)));
73
74 TransformOperations operations2;
75 operations2.operations().append(TranslateTransformOperation::create(Length(4 , WebCore::Fixed), Length(0, WebCore::Fixed), TransformOperation::TranslateX));
76 values.insert(adoptPtr(new TransformAnimationValue(duration, &operations2))) ;
77
78 RefPtr<CSSAnimationData> animation = CSSAnimationData::create();
79 animation->setDuration(duration);
80
81 EXPECT_TRUE(animationCanBeTranslated(values, animation.get()));
82 }
83
84 TEST(AnimationTranslationUtilTest, createTransformAnimationWithBigRotation)
85 {
86 const double duration = 1;
87 WebCore::KeyframeValueList values(AnimatedPropertyWebkitTransform);
88
89 TransformOperations operations1;
90 operations1.operations().append(RotateTransformOperation::create(0, Transfor mOperation::Rotate));
91 values.insert(adoptPtr(new TransformAnimationValue(0, &operations1)));
92
93 TransformOperations operations2;
94 operations2.operations().append(RotateTransformOperation::create(270, Transf ormOperation::Rotate));
95 values.insert(adoptPtr(new TransformAnimationValue(duration, &operations2))) ;
96
97 RefPtr<CSSAnimationData> animation = CSSAnimationData::create();
98 animation->setDuration(duration);
99
100 EXPECT_TRUE(animationCanBeTranslated(values, animation.get()));
101 }
102
103 TEST(AnimationTranslationUtilTest, createTransformAnimationWithBigRotationAndEmp tyTransformOperationList)
104 {
105 const double duration = 1;
106 WebCore::KeyframeValueList values(AnimatedPropertyWebkitTransform);
107
108 TransformOperations operations1;
109 values.insert(adoptPtr(new TransformAnimationValue(0, &operations1)));
110
111 TransformOperations operations2;
112 operations2.operations().append(RotateTransformOperation::create(270, Transf ormOperation::Rotate));
113 values.insert(adoptPtr(new TransformAnimationValue(duration, &operations2))) ;
114
115 RefPtr<CSSAnimationData> animation = CSSAnimationData::create();
116 animation->setDuration(duration);
117
118 EXPECT_TRUE(animationCanBeTranslated(values, animation.get()));
119 }
120
121 TEST(AnimationTranslationUtilTest, createTransformAnimationWithRotationInvolving NegativeAngles)
122 {
123 const double duration = 1;
124 WebCore::KeyframeValueList values(AnimatedPropertyWebkitTransform);
125
126 TransformOperations operations1;
127 operations1.operations().append(RotateTransformOperation::create(-330, Trans formOperation::Rotate));
128 values.insert(adoptPtr(new TransformAnimationValue(0, &operations1)));
129
130 TransformOperations operations2;
131 operations2.operations().append(RotateTransformOperation::create(-320, Trans formOperation::Rotate));
132 values.insert(adoptPtr(new TransformAnimationValue(duration, &operations2))) ;
133
134 RefPtr<CSSAnimationData> animation = CSSAnimationData::create();
135 animation->setDuration(duration);
136
137 EXPECT_TRUE(animationCanBeTranslated(values, animation.get()));
138 }
139
140 TEST(AnimationTranslationUtilTest, createTransformAnimationWithSmallRotationInvo lvingLargeAngles)
141 {
142 const double duration = 1;
143 WebCore::KeyframeValueList values(AnimatedPropertyWebkitTransform);
144
145 TransformOperations operations1;
146 operations1.operations().append(RotateTransformOperation::create(270, Transf ormOperation::Rotate));
147 values.insert(adoptPtr(new TransformAnimationValue(0, &operations1)));
148
149 TransformOperations operations2;
150 operations2.operations().append(RotateTransformOperation::create(360, Transf ormOperation::Rotate));
151 values.insert(adoptPtr(new TransformAnimationValue(duration, &operations2))) ;
152
153 RefPtr<CSSAnimationData> animation = CSSAnimationData::create();
154 animation->setDuration(duration);
155
156 EXPECT_TRUE(animationCanBeTranslated(values, animation.get()));
157 }
158
159 TEST(AnimationTranslationUtilTest, createTransformAnimationWithNonDecomposableMa trix)
160 {
161 const double duration = 1;
162 WebCore::KeyframeValueList values(AnimatedPropertyWebkitTransform);
163
164 TransformationMatrix matrix1;
165 TransformOperations operations1;
166 operations1.operations().append(Matrix3DTransformOperation::create(matrix1)) ;
167 values.insert(adoptPtr(new TransformAnimationValue(0, &operations1)));
168
169 TransformationMatrix matrix2;
170 matrix2.setM11(0);
171 TransformOperations operations2;
172 operations2.operations().append(Matrix3DTransformOperation::create(matrix2)) ;
173 values.insert(adoptPtr(new TransformAnimationValue(duration, &operations2))) ;
174
175 RefPtr<CSSAnimationData> animation = CSSAnimationData::create();
176 animation->setDuration(duration);
177
178 EXPECT_FALSE(animationCanBeTranslated(values, animation.get()));
179 }
180
181 TEST(AnimationTranslationUtilTest, createTransformAnimationWithNonInvertibleTran sform)
182 {
183 const double duration = 1;
184 WebCore::KeyframeValueList values(AnimatedPropertyWebkitTransform);
185
186 TransformOperations operations1;
187 operations1.operations().append(ScaleTransformOperation::create(1, 1, 1, Tra nsformOperation::Scale3D));
188 values.insert(adoptPtr(new TransformAnimationValue(0, &operations1)));
189
190 TransformOperations operations2;
191 operations2.operations().append(ScaleTransformOperation::create(1, 0, 1, Tra nsformOperation::Scale3D));
192 values.insert(adoptPtr(new TransformAnimationValue(duration, &operations2))) ;
193
194 RefPtr<CSSAnimationData> animation = CSSAnimationData::create();
195 animation->setDuration(duration);
196
197 EXPECT_TRUE(animationCanBeTranslated(values, animation.get()));
198 }
199
200 TEST(AnimationTranslationUtilTest, createReversedAnimation)
201 {
202 const double duration = 1;
203 WebCore::KeyframeValueList values(AnimatedPropertyWebkitTransform);
204
205 TransformOperations operations1;
206 operations1.operations().append(TranslateTransformOperation::create(Length(2 , WebCore::Fixed), Length(0, WebCore::Fixed), TransformOperation::TranslateX));
207 values.insert(adoptPtr(new TransformAnimationValue(0, &operations1)));
208
209 TransformOperations operations2;
210 operations2.operations().append(TranslateTransformOperation::create(Length(4 , WebCore::Fixed), Length(0, WebCore::Fixed), TransformOperation::TranslateX));
211 values.insert(adoptPtr(new TransformAnimationValue(duration, &operations2))) ;
212
213 RefPtr<CSSAnimationData> animation = CSSAnimationData::create();
214 animation->setDuration(duration);
215 animation->setDirection(CSSAnimationData::AnimationDirectionReverse);
216
217 EXPECT_TRUE(animationCanBeTranslated(values, animation.get()));
218 }
219
220 TEST(AnimationTranslationUtilTest, createAlternatingAnimation)
221 {
222 const double duration = 1;
223 WebCore::KeyframeValueList values(AnimatedPropertyWebkitTransform);
224
225 TransformOperations operations1;
226 operations1.operations().append(TranslateTransformOperation::create(Length(2 , WebCore::Fixed), Length(0, WebCore::Fixed), TransformOperation::TranslateX));
227 values.insert(adoptPtr(new TransformAnimationValue(0, &operations1)));
228
229 TransformOperations operations2;
230 operations2.operations().append(TranslateTransformOperation::create(Length(4 , WebCore::Fixed), Length(0, WebCore::Fixed), TransformOperation::TranslateX));
231 values.insert(adoptPtr(new TransformAnimationValue(duration, &operations2))) ;
232
233 RefPtr<CSSAnimationData> animation = CSSAnimationData::create();
234 animation->setDuration(duration);
235 animation->setDirection(CSSAnimationData::AnimationDirectionAlternate);
236 animation->setIterationCount(2);
237
238 EXPECT_TRUE(animationCanBeTranslated(values, animation.get()));
239 }
240
241 TEST(AnimationTranslationUtilTest, createReversedAlternatingAnimation)
242 {
243 const double duration = 1;
244 WebCore::KeyframeValueList values(AnimatedPropertyWebkitTransform);
245
246 TransformOperations operations1;
247 operations1.operations().append(TranslateTransformOperation::create(Length(2 , WebCore::Fixed), Length(0, WebCore::Fixed), TransformOperation::TranslateX));
248 values.insert(adoptPtr(new TransformAnimationValue(0, &operations1)));
249
250 TransformOperations operations2;
251 operations2.operations().append(TranslateTransformOperation::create(Length(4 , WebCore::Fixed), Length(0, WebCore::Fixed), TransformOperation::TranslateX));
252 values.insert(adoptPtr(new TransformAnimationValue(duration, &operations2))) ;
253
254 RefPtr<CSSAnimationData> animation = CSSAnimationData::create();
255 animation->setDuration(duration);
256 animation->setDirection(CSSAnimationData::AnimationDirectionAlternateReverse );
257 animation->setIterationCount(2);
258
259 EXPECT_TRUE(animationCanBeTranslated(values, animation.get()));
260 }
261
262 }
263
OLDNEW
« no previous file with comments | « Source/core/platform/graphics/chromium/AnimationTranslationUtil.cpp ('k') | Source/core/rendering/RenderLayerBacking.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698