OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2013, Google Inc. All rights reserved. | 2 * Copyright (c) 2013, Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 20 matching lines...) Expand all Loading... |
31 #include "config.h" | 31 #include "config.h" |
32 #include "core/animation/AnimationTimeline.h" | 32 #include "core/animation/AnimationTimeline.h" |
33 | 33 |
34 #include "core/animation/AnimationClock.h" | 34 #include "core/animation/AnimationClock.h" |
35 #include "core/animation/AnimationEffect.h" | 35 #include "core/animation/AnimationEffect.h" |
36 #include "core/animation/KeyframeEffect.h" | 36 #include "core/animation/KeyframeEffect.h" |
37 #include "core/animation/KeyframeEffectModel.h" | 37 #include "core/animation/KeyframeEffectModel.h" |
38 #include "core/dom/Document.h" | 38 #include "core/dom/Document.h" |
39 #include "core/dom/Element.h" | 39 #include "core/dom/Element.h" |
40 #include "core/dom/QualifiedName.h" | 40 #include "core/dom/QualifiedName.h" |
41 #include "core/testing/DummyPageHolder.h" | |
42 #include "platform/weborigin/KURL.h" | 41 #include "platform/weborigin/KURL.h" |
43 | 42 |
44 #include <gmock/gmock.h> | 43 #include <gmock/gmock.h> |
45 #include <gtest/gtest.h> | 44 #include <gtest/gtest.h> |
46 | 45 |
47 namespace blink { | 46 namespace blink { |
48 | 47 |
49 class MockPlatformTiming : public AnimationTimeline::PlatformTiming { | 48 class MockPlatformTiming : public AnimationTimeline::PlatformTiming { |
50 public: | 49 public: |
51 | 50 |
(...skipping 16 matching lines...) Expand all Loading... |
68 DEFINE_INLINE_TRACE() | 67 DEFINE_INLINE_TRACE() |
69 { | 68 { |
70 AnimationTimeline::PlatformTiming::trace(visitor); | 69 AnimationTimeline::PlatformTiming::trace(visitor); |
71 } | 70 } |
72 }; | 71 }; |
73 | 72 |
74 class AnimationAnimationTimelineTest : public ::testing::Test { | 73 class AnimationAnimationTimelineTest : public ::testing::Test { |
75 protected: | 74 protected: |
76 virtual void SetUp() | 75 virtual void SetUp() |
77 { | 76 { |
78 pageHolder = DummyPageHolder::create(); | 77 document = Document::create(); |
79 document = &pageHolder->document(); | |
80 document->animationClock().resetTimeForTesting(); | 78 document->animationClock().resetTimeForTesting(); |
81 updateClock(0); | |
82 element = Element::create(QualifiedName::null() , document.get()); | 79 element = Element::create(QualifiedName::null() , document.get()); |
83 platformTiming = new MockPlatformTiming; | 80 platformTiming = new MockPlatformTiming; |
84 timeline = AnimationTimeline::create(document.get(), platformTiming); | 81 timeline = AnimationTimeline::create(document.get(), platformTiming); |
85 ASSERT_EQ(0, timeline->currentTimeInternal()); | 82 ASSERT_EQ(0, timeline->currentTimeInternal()); |
86 } | 83 } |
87 | 84 |
88 virtual void TearDown() | 85 virtual void TearDown() |
89 { | 86 { |
90 document.release(); | 87 document.release(); |
91 element.release(); | 88 element.release(); |
92 timeline.release(); | 89 timeline.release(); |
93 #if ENABLE(OILPAN) | 90 #if ENABLE(OILPAN) |
94 Heap::collectAllGarbage(); | 91 Heap::collectAllGarbage(); |
95 #endif | 92 #endif |
96 } | 93 } |
97 | 94 |
98 void updateClock(double time) | |
99 { | |
100 document->animationClock().updateTime(document->timeline().zeroTime() +
time); | |
101 } | |
102 | |
103 void updateClockAndService(double time) | 95 void updateClockAndService(double time) |
104 { | 96 { |
105 updateClock(time); | 97 document->animationClock().updateTime(time); |
106 document->compositorPendingAnimations().update(false); | 98 document->compositorPendingAnimations().update(false); |
107 timeline->serviceAnimations(TimingUpdateForAnimationFrame); | 99 timeline->serviceAnimations(TimingUpdateForAnimationFrame); |
108 timeline->scheduleNextService(); | 100 timeline->scheduleNextService(); |
109 } | 101 } |
110 | 102 |
111 OwnPtr<DummyPageHolder> pageHolder; | |
112 RefPtrWillBePersistent<Document> document; | 103 RefPtrWillBePersistent<Document> document; |
113 RefPtrWillBePersistent<Element> element; | 104 RefPtrWillBePersistent<Element> element; |
114 Persistent<AnimationTimeline> timeline; | 105 Persistent<AnimationTimeline> timeline; |
115 Timing timing; | 106 Timing timing; |
116 Persistent<MockPlatformTiming> platformTiming; | 107 Persistent<MockPlatformTiming> platformTiming; |
117 | 108 |
118 void wake() | 109 void wake() |
119 { | 110 { |
120 timeline->wake(); | 111 timeline->wake(); |
121 } | 112 } |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
164 platformTiming->expectNoMoreActions(); | 155 platformTiming->expectNoMoreActions(); |
165 updateClockAndService(100); | 156 updateClockAndService(100); |
166 EXPECT_FLOAT_EQ(100, timeline->currentTimeInternal()); | 157 EXPECT_FLOAT_EQ(100, timeline->currentTimeInternal()); |
167 } | 158 } |
168 | 159 |
169 TEST_F(AnimationAnimationTimelineTest, ZeroTime) | 160 TEST_F(AnimationAnimationTimelineTest, ZeroTime) |
170 { | 161 { |
171 timeline = AnimationTimeline::create(document.get()); | 162 timeline = AnimationTimeline::create(document.get()); |
172 bool isNull; | 163 bool isNull; |
173 | 164 |
174 updateClock(100); | 165 document->animationClock().updateTime(100); |
175 EXPECT_EQ(100, timeline->currentTimeInternal()); | 166 EXPECT_EQ(100, timeline->currentTimeInternal()); |
176 EXPECT_EQ(100, timeline->currentTimeInternal(isNull)); | 167 EXPECT_EQ(100, timeline->currentTimeInternal(isNull)); |
177 EXPECT_FALSE(isNull); | 168 EXPECT_FALSE(isNull); |
178 | 169 |
179 updateClock(200); | 170 document->animationClock().updateTime(200); |
180 EXPECT_EQ(200, timeline->currentTimeInternal()); | 171 EXPECT_EQ(200, timeline->currentTimeInternal()); |
181 EXPECT_EQ(200, timeline->currentTimeInternal(isNull)); | 172 EXPECT_EQ(200, timeline->currentTimeInternal(isNull)); |
182 EXPECT_FALSE(isNull); | 173 EXPECT_FALSE(isNull); |
183 } | 174 } |
184 | 175 |
185 TEST_F(AnimationAnimationTimelineTest, PlaybackRateNormal) | 176 TEST_F(AnimationAnimationTimelineTest, PlaybackRateNormal) |
186 { | 177 { |
187 timeline = AnimationTimeline::create(document.get()); | 178 timeline = AnimationTimeline::create(document.get()); |
188 double zeroTime = timeline->zeroTime(); | 179 double zeroTime = timeline->zeroTime(); |
189 bool isNull; | 180 bool isNull; |
190 | 181 |
191 timeline->setPlaybackRate(1.0); | 182 timeline->setPlaybackRate(1.0); |
192 EXPECT_EQ(1.0, timeline->playbackRate()); | 183 EXPECT_EQ(1.0, timeline->playbackRate()); |
193 updateClock(100); | 184 document->animationClock().updateTime(100); |
194 EXPECT_EQ(zeroTime, timeline->zeroTime()); | 185 EXPECT_EQ(zeroTime, timeline->zeroTime()); |
195 EXPECT_EQ(100, timeline->currentTimeInternal()); | 186 EXPECT_EQ(100, timeline->currentTimeInternal()); |
196 EXPECT_EQ(100, timeline->currentTimeInternal(isNull)); | 187 EXPECT_EQ(100, timeline->currentTimeInternal(isNull)); |
197 EXPECT_FALSE(isNull); | 188 EXPECT_FALSE(isNull); |
198 | 189 |
199 updateClock(200); | 190 document->animationClock().updateTime(200); |
200 EXPECT_EQ(zeroTime, timeline->zeroTime()); | 191 EXPECT_EQ(zeroTime, timeline->zeroTime()); |
201 EXPECT_EQ(200, timeline->currentTimeInternal()); | 192 EXPECT_EQ(200, timeline->currentTimeInternal()); |
202 EXPECT_EQ(200, timeline->currentTimeInternal(isNull)); | 193 EXPECT_EQ(200, timeline->currentTimeInternal(isNull)); |
203 EXPECT_FALSE(isNull); | 194 EXPECT_FALSE(isNull); |
204 } | 195 } |
205 | 196 |
206 TEST_F(AnimationAnimationTimelineTest, PlaybackRatePause) | 197 TEST_F(AnimationAnimationTimelineTest, PlaybackRatePause) |
207 { | 198 { |
208 timeline = AnimationTimeline::create(document.get()); | 199 timeline = AnimationTimeline::create(document.get()); |
209 bool isNull; | 200 bool isNull; |
210 double zeroTime = timeline->zeroTime(); | |
211 | 201 |
212 updateClock(100); | 202 document->animationClock().updateTime(100); |
213 EXPECT_EQ(zeroTime, timeline->zeroTime()); | 203 EXPECT_EQ(0, timeline->zeroTime()); |
214 EXPECT_EQ(100, timeline->currentTimeInternal()); | 204 EXPECT_EQ(100, timeline->currentTimeInternal()); |
215 EXPECT_EQ(100, timeline->currentTimeInternal(isNull)); | 205 EXPECT_EQ(100, timeline->currentTimeInternal(isNull)); |
216 EXPECT_FALSE(isNull); | 206 EXPECT_FALSE(isNull); |
217 | 207 |
218 timeline->setPlaybackRate(0.0); | 208 timeline->setPlaybackRate(0.0); |
219 EXPECT_EQ(0.0, timeline->playbackRate()); | 209 EXPECT_EQ(0.0, timeline->playbackRate()); |
220 updateClock(200); | 210 document->animationClock().updateTime(200); |
221 EXPECT_EQ(100, timeline->zeroTime()); | 211 EXPECT_EQ(100, timeline->zeroTime()); |
222 EXPECT_EQ(100, timeline->currentTimeInternal()); | 212 EXPECT_EQ(100, timeline->currentTimeInternal()); |
223 EXPECT_EQ(100, timeline->currentTimeInternal(isNull)); | 213 EXPECT_EQ(100, timeline->currentTimeInternal(isNull)); |
224 | 214 |
225 timeline->setPlaybackRate(1.0); | 215 timeline->setPlaybackRate(1.0); |
226 EXPECT_EQ(1.0, timeline->playbackRate()); | 216 EXPECT_EQ(1.0, timeline->playbackRate()); |
227 updateClock(400); | 217 document->animationClock().updateTime(400); |
228 EXPECT_EQ(zeroTime + 100, timeline->zeroTime()); | 218 EXPECT_EQ(100, timeline->zeroTime()); |
229 EXPECT_EQ(300, timeline->currentTimeInternal()); | 219 EXPECT_EQ(300, timeline->currentTimeInternal()); |
230 EXPECT_EQ(300, timeline->currentTimeInternal(isNull)); | 220 EXPECT_EQ(300, timeline->currentTimeInternal(isNull)); |
231 | 221 |
232 EXPECT_FALSE(isNull); | 222 EXPECT_FALSE(isNull); |
233 } | 223 } |
234 | 224 |
235 TEST_F(AnimationAnimationTimelineTest, PlaybackRateSlow) | 225 TEST_F(AnimationAnimationTimelineTest, PlaybackRateSlow) |
236 { | 226 { |
237 timeline = AnimationTimeline::create(document.get()); | 227 timeline = AnimationTimeline::create(document.get()); |
238 bool isNull; | 228 bool isNull; |
239 double zeroTime = timeline->zeroTime(); | |
240 | 229 |
241 updateClock(100); | 230 document->animationClock().updateTime(100); |
242 EXPECT_EQ(zeroTime, timeline->zeroTime()); | 231 EXPECT_EQ(0, timeline->zeroTime()); |
243 EXPECT_EQ(100, timeline->currentTimeInternal()); | 232 EXPECT_EQ(100, timeline->currentTimeInternal()); |
244 EXPECT_EQ(100, timeline->currentTimeInternal(isNull)); | 233 EXPECT_EQ(100, timeline->currentTimeInternal(isNull)); |
245 EXPECT_FALSE(isNull); | 234 EXPECT_FALSE(isNull); |
246 | 235 |
247 timeline->setPlaybackRate(0.5); | 236 timeline->setPlaybackRate(0.5); |
248 EXPECT_EQ(0.5, timeline->playbackRate()); | 237 EXPECT_EQ(0.5, timeline->playbackRate()); |
249 updateClock(300); | 238 document->animationClock().updateTime(300); |
250 EXPECT_EQ(zeroTime - 100, timeline->zeroTime()); | 239 EXPECT_EQ(-100, timeline->zeroTime()); |
251 EXPECT_EQ(200, timeline->currentTimeInternal()); | 240 EXPECT_EQ(200, timeline->currentTimeInternal()); |
252 EXPECT_EQ(200, timeline->currentTimeInternal(isNull)); | 241 EXPECT_EQ(200, timeline->currentTimeInternal(isNull)); |
253 | 242 |
254 timeline->setPlaybackRate(1.0); | 243 timeline->setPlaybackRate(1.0); |
255 EXPECT_EQ(1.0, timeline->playbackRate()); | 244 EXPECT_EQ(1.0, timeline->playbackRate()); |
256 updateClock(400); | 245 document->animationClock().updateTime(400); |
257 EXPECT_EQ(zeroTime + 100, timeline->zeroTime()); | 246 EXPECT_EQ(100, timeline->zeroTime()); |
258 EXPECT_EQ(300, timeline->currentTimeInternal()); | 247 EXPECT_EQ(300, timeline->currentTimeInternal()); |
259 EXPECT_EQ(300, timeline->currentTimeInternal(isNull)); | 248 EXPECT_EQ(300, timeline->currentTimeInternal(isNull)); |
260 | 249 |
261 EXPECT_FALSE(isNull); | 250 EXPECT_FALSE(isNull); |
262 } | 251 } |
263 | 252 |
264 TEST_F(AnimationAnimationTimelineTest, PlaybackRateFast) | 253 TEST_F(AnimationAnimationTimelineTest, PlaybackRateFast) |
265 { | 254 { |
266 timeline = AnimationTimeline::create(document.get()); | 255 timeline = AnimationTimeline::create(document.get()); |
267 bool isNull; | 256 bool isNull; |
268 double zeroTime = timeline->zeroTime(); | |
269 | 257 |
270 updateClock(100); | 258 document->animationClock().updateTime(100); |
271 EXPECT_EQ(zeroTime, timeline->zeroTime()); | 259 EXPECT_EQ(0, timeline->zeroTime()); |
272 EXPECT_EQ(100, timeline->currentTimeInternal()); | 260 EXPECT_EQ(100, timeline->currentTimeInternal()); |
273 EXPECT_EQ(100, timeline->currentTimeInternal(isNull)); | 261 EXPECT_EQ(100, timeline->currentTimeInternal(isNull)); |
274 EXPECT_FALSE(isNull); | 262 EXPECT_FALSE(isNull); |
275 | 263 |
276 timeline->setPlaybackRate(2.0); | 264 timeline->setPlaybackRate(2.0); |
277 EXPECT_EQ(2.0, timeline->playbackRate()); | 265 EXPECT_EQ(2.0, timeline->playbackRate()); |
278 updateClock(300); | 266 document->animationClock().updateTime(300); |
279 EXPECT_EQ(zeroTime + 50, timeline->zeroTime()); | 267 EXPECT_EQ(50, timeline->zeroTime()); |
280 EXPECT_EQ(500, timeline->currentTimeInternal()); | 268 EXPECT_EQ(500, timeline->currentTimeInternal()); |
281 EXPECT_EQ(500, timeline->currentTimeInternal(isNull)); | 269 EXPECT_EQ(500, timeline->currentTimeInternal(isNull)); |
282 | 270 |
283 timeline->setPlaybackRate(1.0); | 271 timeline->setPlaybackRate(1.0); |
284 EXPECT_EQ(1.0, timeline->playbackRate()); | 272 EXPECT_EQ(1.0, timeline->playbackRate()); |
285 updateClock(400); | 273 document->animationClock().updateTime(400); |
286 EXPECT_EQ(zeroTime - 200, timeline->zeroTime()); | 274 EXPECT_EQ(-200, timeline->zeroTime()); |
287 EXPECT_EQ(600, timeline->currentTimeInternal()); | 275 EXPECT_EQ(600, timeline->currentTimeInternal()); |
288 EXPECT_EQ(600, timeline->currentTimeInternal(isNull)); | 276 EXPECT_EQ(600, timeline->currentTimeInternal(isNull)); |
289 | 277 |
290 EXPECT_FALSE(isNull); | 278 EXPECT_FALSE(isNull); |
291 } | 279 } |
292 | 280 |
293 TEST_F(AnimationAnimationTimelineTest, SetCurrentTime) | 281 TEST_F(AnimationAnimationTimelineTest, SetCurrentTime) |
294 { | 282 { |
295 timeline = AnimationTimeline::create(document.get()); | 283 timeline = AnimationTimeline::create(document.get()); |
296 double zeroTime = timeline->zeroTime(); | 284 double zeroTime = timeline->zeroTime(); |
297 | 285 |
298 updateClock(100); | 286 document->animationClock().updateTime(100); |
299 EXPECT_EQ(zeroTime, timeline->zeroTime()); | 287 EXPECT_EQ(zeroTime, timeline->zeroTime()); |
300 EXPECT_EQ(100, timeline->currentTimeInternal()); | 288 EXPECT_EQ(100, timeline->currentTimeInternal()); |
301 | 289 |
302 timeline->setCurrentTimeInternal(0); | 290 timeline->setCurrentTimeInternal(0); |
303 EXPECT_EQ(0, timeline->currentTimeInternal()); | 291 EXPECT_EQ(0, timeline->currentTimeInternal()); |
304 EXPECT_EQ(zeroTime + 100, timeline->zeroTime()); | 292 EXPECT_EQ(zeroTime + 100, timeline->zeroTime()); |
305 | 293 |
306 timeline->setCurrentTimeInternal(100); | 294 timeline->setCurrentTimeInternal(100); |
307 EXPECT_EQ(100, timeline->currentTimeInternal()); | 295 EXPECT_EQ(100, timeline->currentTimeInternal()); |
308 EXPECT_EQ(zeroTime, timeline->zeroTime()); | 296 EXPECT_EQ(zeroTime, timeline->zeroTime()); |
309 | 297 |
310 timeline->setCurrentTimeInternal(200); | 298 timeline->setCurrentTimeInternal(200); |
311 EXPECT_EQ(200, timeline->currentTimeInternal()); | 299 EXPECT_EQ(200, timeline->currentTimeInternal()); |
312 EXPECT_EQ(zeroTime - 100, timeline->zeroTime()); | 300 EXPECT_EQ(zeroTime - 100, timeline->zeroTime()); |
313 | 301 |
314 updateClock(200); | 302 document->animationClock().updateTime(200); |
315 EXPECT_EQ(300, timeline->currentTimeInternal()); | 303 EXPECT_EQ(300, timeline->currentTimeInternal()); |
316 EXPECT_EQ(zeroTime - 100, timeline->zeroTime()); | 304 EXPECT_EQ(zeroTime - 100, timeline->zeroTime()); |
317 | 305 |
318 timeline->setCurrentTimeInternal(0); | 306 timeline->setCurrentTimeInternal(0); |
319 EXPECT_EQ(0, timeline->currentTimeInternal()); | 307 EXPECT_EQ(0, timeline->currentTimeInternal()); |
320 EXPECT_EQ(zeroTime + 200, timeline->zeroTime()); | 308 EXPECT_EQ(zeroTime + 200, timeline->zeroTime()); |
321 | 309 |
322 timeline->setCurrentTimeInternal(100); | 310 timeline->setCurrentTimeInternal(100); |
323 EXPECT_EQ(100, timeline->currentTimeInternal()); | 311 EXPECT_EQ(100, timeline->currentTimeInternal()); |
324 EXPECT_EQ(zeroTime + 100, timeline->zeroTime()); | 312 EXPECT_EQ(zeroTime + 100, timeline->zeroTime()); |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
393 | 381 |
394 TEST_F(AnimationAnimationTimelineTest, UseAnimationAfterTimelineDeref) | 382 TEST_F(AnimationAnimationTimelineTest, UseAnimationAfterTimelineDeref) |
395 { | 383 { |
396 Animation* animation = timeline->play(0); | 384 Animation* animation = timeline->play(0); |
397 timeline.clear(); | 385 timeline.clear(); |
398 // Test passes if this does not crash. | 386 // Test passes if this does not crash. |
399 animation->setStartTime(0); | 387 animation->setStartTime(0); |
400 } | 388 } |
401 | 389 |
402 } | 390 } |
OLD | NEW |