| 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 |