| 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 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 startTimeline(); | 51 startTimeline(); |
| 52 } | 52 } |
| 53 | 53 |
| 54 void setUpWithoutStartingTimeline() | 54 void setUpWithoutStartingTimeline() |
| 55 { | 55 { |
| 56 document = Document::create(); | 56 document = Document::create(); |
| 57 document->animationClock().resetTimeForTesting(); | 57 document->animationClock().resetTimeForTesting(); |
| 58 timeline = AnimationTimeline::create(document.get()); | 58 timeline = AnimationTimeline::create(document.get()); |
| 59 animation = timeline->play(0); | 59 animation = timeline->play(0); |
| 60 animation->setStartTime(0); | 60 animation->setStartTime(0); |
| 61 animation->setEffect(makeAnimation().get()); | 61 animation->setEffect(makeAnimation()); |
| 62 } | 62 } |
| 63 | 63 |
| 64 void startTimeline() | 64 void startTimeline() |
| 65 { | 65 { |
| 66 simulateFrame(0); | 66 simulateFrame(0); |
| 67 } | 67 } |
| 68 | 68 |
| 69 PassRefPtrWillBeRawPtr<KeyframeEffect> makeAnimation(double duration = 30, d
ouble playbackRate = 1) | 69 KeyframeEffect* makeAnimation(double duration = 30, double playbackRate = 1) |
| 70 { | 70 { |
| 71 Timing timing; | 71 Timing timing; |
| 72 timing.iterationDuration = duration; | 72 timing.iterationDuration = duration; |
| 73 timing.playbackRate = playbackRate; | 73 timing.playbackRate = playbackRate; |
| 74 return KeyframeEffect::create(0, nullptr, timing); | 74 return KeyframeEffect::create(0, nullptr, timing); |
| 75 } | 75 } |
| 76 | 76 |
| 77 bool simulateFrame(double time) | 77 bool simulateFrame(double time) |
| 78 { | 78 { |
| 79 document->animationClock().updateTime(time); | 79 document->animationClock().updateTime(time); |
| 80 document->compositorPendingAnimations().update(false); | 80 document->compositorPendingAnimations().update(false); |
| 81 // The timeline does not know about our animation, so we have to explici
tly call update(). | 81 // The timeline does not know about our animation, so we have to explici
tly call update(). |
| 82 return animation->update(TimingUpdateForAnimationFrame); | 82 return animation->update(TimingUpdateForAnimationFrame); |
| 83 } | 83 } |
| 84 | 84 |
| 85 RefPtrWillBePersistent<Document> document; | 85 RefPtrWillBePersistent<Document> document; |
| 86 RefPtrWillBePersistent<AnimationTimeline> timeline; | 86 Persistent<AnimationTimeline> timeline; |
| 87 RefPtrWillBePersistent<Animation> animation; | 87 Persistent<Animation> animation; |
| 88 TrackExceptionState exceptionState; | 88 TrackExceptionState exceptionState; |
| 89 }; | 89 }; |
| 90 | 90 |
| 91 TEST_F(AnimationAnimationTest, InitialState) | 91 TEST_F(AnimationAnimationTest, InitialState) |
| 92 { | 92 { |
| 93 setUpWithoutStartingTimeline(); | 93 setUpWithoutStartingTimeline(); |
| 94 animation = timeline->play(0); | 94 animation = timeline->play(0); |
| 95 EXPECT_EQ(Animation::Pending, animation->playStateInternal()); | 95 EXPECT_EQ(Animation::Pending, animation->playStateInternal()); |
| 96 EXPECT_EQ(0, animation->currentTimeInternal()); | 96 EXPECT_EQ(0, animation->currentTimeInternal()); |
| 97 EXPECT_FALSE(animation->paused()); | 97 EXPECT_FALSE(animation->paused()); |
| (...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 497 animation->setPlaybackRate(0); | 497 animation->setPlaybackRate(0); |
| 498 animation->finish(exceptionState); | 498 animation->finish(exceptionState); |
| 499 EXPECT_EQ(10, animation->currentTimeInternal()); | 499 EXPECT_EQ(10, animation->currentTimeInternal()); |
| 500 } | 500 } |
| 501 | 501 |
| 502 TEST_F(AnimationAnimationTest, FinishRaisesException) | 502 TEST_F(AnimationAnimationTest, FinishRaisesException) |
| 503 { | 503 { |
| 504 Timing timing; | 504 Timing timing; |
| 505 timing.iterationDuration = 1; | 505 timing.iterationDuration = 1; |
| 506 timing.iterationCount = std::numeric_limits<double>::infinity(); | 506 timing.iterationCount = std::numeric_limits<double>::infinity(); |
| 507 animation->setEffect(KeyframeEffect::create(0, nullptr, timing).get()); | 507 animation->setEffect(KeyframeEffect::create(0, nullptr, timing)); |
| 508 animation->setCurrentTimeInternal(10); | 508 animation->setCurrentTimeInternal(10); |
| 509 | 509 |
| 510 animation->finish(exceptionState); | 510 animation->finish(exceptionState); |
| 511 EXPECT_EQ(10, animation->currentTimeInternal()); | 511 EXPECT_EQ(10, animation->currentTimeInternal()); |
| 512 EXPECT_TRUE(exceptionState.hadException()); | 512 EXPECT_TRUE(exceptionState.hadException()); |
| 513 EXPECT_EQ(InvalidStateError, exceptionState.code()); | 513 EXPECT_EQ(InvalidStateError, exceptionState.code()); |
| 514 } | 514 } |
| 515 | 515 |
| 516 TEST_F(AnimationAnimationTest, LimitingAtEffectEnd) | 516 TEST_F(AnimationAnimationTest, LimitingAtEffectEnd) |
| 517 { | 517 { |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 614 EXPECT_EQ(0, animation->currentTimeInternal()); | 614 EXPECT_EQ(0, animation->currentTimeInternal()); |
| 615 simulateFrame(1); | 615 simulateFrame(1); |
| 616 EXPECT_EQ(30, animation->currentTimeInternal()); | 616 EXPECT_EQ(30, animation->currentTimeInternal()); |
| 617 } | 617 } |
| 618 | 618 |
| 619 | 619 |
| 620 TEST_F(AnimationAnimationTest, SetEffect) | 620 TEST_F(AnimationAnimationTest, SetEffect) |
| 621 { | 621 { |
| 622 animation = timeline->play(0); | 622 animation = timeline->play(0); |
| 623 animation->setStartTime(0); | 623 animation->setStartTime(0); |
| 624 RefPtrWillBeRawPtr<AnimationEffect> effect1 = makeAnimation(); | 624 AnimationEffect* effect1 = makeAnimation(); |
| 625 RefPtrWillBeRawPtr<AnimationEffect> effect2 = makeAnimation(); | 625 AnimationEffect* effect2 = makeAnimation(); |
| 626 animation->setEffect(effect1.get()); | 626 animation->setEffect(effect1); |
| 627 EXPECT_EQ(effect1, animation->effect()); | 627 EXPECT_EQ(effect1, animation->effect()); |
| 628 EXPECT_EQ(0, animation->currentTimeInternal()); | 628 EXPECT_EQ(0, animation->currentTimeInternal()); |
| 629 animation->setCurrentTimeInternal(15); | 629 animation->setCurrentTimeInternal(15); |
| 630 animation->setEffect(effect2.get()); | 630 animation->setEffect(effect2); |
| 631 EXPECT_EQ(15, animation->currentTimeInternal()); | 631 EXPECT_EQ(15, animation->currentTimeInternal()); |
| 632 EXPECT_EQ(0, effect1->animation()); | 632 EXPECT_EQ(0, effect1->animation()); |
| 633 EXPECT_EQ(animation.get(), effect2->animation()); | 633 EXPECT_EQ(animation, effect2->animation()); |
| 634 EXPECT_EQ(effect2, animation->effect()); | 634 EXPECT_EQ(effect2, animation->effect()); |
| 635 } | 635 } |
| 636 | 636 |
| 637 TEST_F(AnimationAnimationTest, SetEffectLimitsAnimation) | 637 TEST_F(AnimationAnimationTest, SetEffectLimitsAnimation) |
| 638 { | 638 { |
| 639 animation->setCurrentTimeInternal(20); | 639 animation->setCurrentTimeInternal(20); |
| 640 animation->setEffect(makeAnimation(10).get()); | 640 animation->setEffect(makeAnimation(10)); |
| 641 EXPECT_EQ(20, animation->currentTimeInternal()); | 641 EXPECT_EQ(20, animation->currentTimeInternal()); |
| 642 EXPECT_TRUE(animation->limited()); | 642 EXPECT_TRUE(animation->limited()); |
| 643 simulateFrame(10); | 643 simulateFrame(10); |
| 644 EXPECT_EQ(20, animation->currentTimeInternal()); | 644 EXPECT_EQ(20, animation->currentTimeInternal()); |
| 645 } | 645 } |
| 646 | 646 |
| 647 TEST_F(AnimationAnimationTest, SetEffectUnlimitsAnimation) | 647 TEST_F(AnimationAnimationTest, SetEffectUnlimitsAnimation) |
| 648 { | 648 { |
| 649 animation->setCurrentTimeInternal(40); | 649 animation->setCurrentTimeInternal(40); |
| 650 animation->setEffect(makeAnimation(60).get()); | 650 animation->setEffect(makeAnimation(60)); |
| 651 EXPECT_FALSE(animation->limited()); | 651 EXPECT_FALSE(animation->limited()); |
| 652 EXPECT_EQ(40, animation->currentTimeInternal()); | 652 EXPECT_EQ(40, animation->currentTimeInternal()); |
| 653 simulateFrame(10); | 653 simulateFrame(10); |
| 654 EXPECT_EQ(50, animation->currentTimeInternal()); | 654 EXPECT_EQ(50, animation->currentTimeInternal()); |
| 655 } | 655 } |
| 656 | 656 |
| 657 | 657 |
| 658 TEST_F(AnimationAnimationTest, EmptyAnimationsDontUpdateEffects) | 658 TEST_F(AnimationAnimationTest, EmptyAnimationsDontUpdateEffects) |
| 659 { | 659 { |
| 660 animation = timeline->play(0); | 660 animation = timeline->play(0); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 673 animation->setEffect(animationNode); | 673 animation->setEffect(animationNode); |
| 674 EXPECT_EQ(0, animation2->effect()); | 674 EXPECT_EQ(0, animation2->effect()); |
| 675 } | 675 } |
| 676 | 676 |
| 677 TEST_F(AnimationAnimationTest, AnimationsReturnTimeToNextEffect) | 677 TEST_F(AnimationAnimationTest, AnimationsReturnTimeToNextEffect) |
| 678 { | 678 { |
| 679 Timing timing; | 679 Timing timing; |
| 680 timing.startDelay = 1; | 680 timing.startDelay = 1; |
| 681 timing.iterationDuration = 1; | 681 timing.iterationDuration = 1; |
| 682 timing.endDelay = 1; | 682 timing.endDelay = 1; |
| 683 RefPtrWillBeRawPtr<KeyframeEffect> keyframeEffect = KeyframeEffect::create(0
, nullptr, timing); | 683 KeyframeEffect* keyframeEffect = KeyframeEffect::create(0, nullptr, timing); |
| 684 animation = timeline->play(keyframeEffect.get()); | 684 animation = timeline->play(keyframeEffect); |
| 685 animation->setStartTime(0); | 685 animation->setStartTime(0); |
| 686 | 686 |
| 687 simulateFrame(0); | 687 simulateFrame(0); |
| 688 EXPECT_EQ(1, animation->timeToEffectChange()); | 688 EXPECT_EQ(1, animation->timeToEffectChange()); |
| 689 | 689 |
| 690 simulateFrame(0.5); | 690 simulateFrame(0.5); |
| 691 EXPECT_EQ(0.5, animation->timeToEffectChange()); | 691 EXPECT_EQ(0.5, animation->timeToEffectChange()); |
| 692 | 692 |
| 693 simulateFrame(1); | 693 simulateFrame(1); |
| 694 EXPECT_EQ(0, animation->timeToEffectChange()); | 694 EXPECT_EQ(0, animation->timeToEffectChange()); |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 774 // received from the compositor yet, as cancel() nukes start times. | 774 // received from the compositor yet, as cancel() nukes start times. |
| 775 simulateFrame(0); | 775 simulateFrame(0); |
| 776 EXPECT_EQ(std::numeric_limits<double>::infinity(), animation->timeToEffectCh
ange()); | 776 EXPECT_EQ(std::numeric_limits<double>::infinity(), animation->timeToEffectCh
ange()); |
| 777 } | 777 } |
| 778 | 778 |
| 779 TEST_F(AnimationAnimationTest, AttachedAnimations) | 779 TEST_F(AnimationAnimationTest, AttachedAnimations) |
| 780 { | 780 { |
| 781 RefPtrWillBePersistent<Element> element = document->createElement("foo", ASS
ERT_NO_EXCEPTION); | 781 RefPtrWillBePersistent<Element> element = document->createElement("foo", ASS
ERT_NO_EXCEPTION); |
| 782 | 782 |
| 783 Timing timing; | 783 Timing timing; |
| 784 RefPtrWillBeRawPtr<KeyframeEffect> keyframeEffect = KeyframeEffect::create(e
lement.get(), nullptr, timing); | 784 KeyframeEffect* keyframeEffect = KeyframeEffect::create(element.get(), nullp
tr, timing); |
| 785 RefPtrWillBeRawPtr<Animation> animation = timeline->play(keyframeEffect.get(
)); | 785 Animation* animation = timeline->play(keyframeEffect); |
| 786 simulateFrame(0); | 786 simulateFrame(0); |
| 787 timeline->serviceAnimations(TimingUpdateForAnimationFrame); | 787 timeline->serviceAnimations(TimingUpdateForAnimationFrame); |
| 788 EXPECT_EQ(1U, element->elementAnimations()->animations().find(animation.get(
))->value); | 788 EXPECT_EQ(1U, element->elementAnimations()->animations().find(animation)->va
lue); |
| 789 | 789 |
| 790 animation.release(); | |
| 791 Heap::collectAllGarbage(); | 790 Heap::collectAllGarbage(); |
| 792 EXPECT_TRUE(element->elementAnimations()->animations().isEmpty()); | 791 EXPECT_TRUE(element->elementAnimations()->animations().isEmpty()); |
| 793 } | 792 } |
| 794 | 793 |
| 795 TEST_F(AnimationAnimationTest, HasLowerPriority) | 794 TEST_F(AnimationAnimationTest, HasLowerPriority) |
| 796 { | 795 { |
| 797 RefPtrWillBeRawPtr<Animation> animation1 = timeline->play(0); | 796 Animation* animation1 = timeline->play(0); |
| 798 RefPtrWillBeRawPtr<Animation> animation2 = timeline->play(0); | 797 Animation* animation2 = timeline->play(0); |
| 799 EXPECT_TRUE(Animation::hasLowerPriority(animation1.get(), animation2.get()))
; | 798 EXPECT_TRUE(Animation::hasLowerPriority(animation1, animation2)); |
| 800 } | 799 } |
| 801 | 800 |
| 802 TEST_F(AnimationAnimationTest, PlayAfterCancel) | 801 TEST_F(AnimationAnimationTest, PlayAfterCancel) |
| 803 { | 802 { |
| 804 animation->cancel(); | 803 animation->cancel(); |
| 805 EXPECT_EQ(Animation::Idle, animation->playStateInternal()); | 804 EXPECT_EQ(Animation::Idle, animation->playStateInternal()); |
| 806 EXPECT_TRUE(std::isnan(animation->currentTime())); | 805 EXPECT_TRUE(std::isnan(animation->currentTime())); |
| 807 EXPECT_TRUE(std::isnan(animation->startTime())); | 806 EXPECT_TRUE(std::isnan(animation->startTime())); |
| 808 animation->play(); | 807 animation->play(); |
| 809 EXPECT_EQ(Animation::Pending, animation->playStateInternal()); | 808 EXPECT_EQ(Animation::Pending, animation->playStateInternal()); |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 868 EXPECT_EQ(Animation::Idle, animation->playStateInternal()); | 867 EXPECT_EQ(Animation::Idle, animation->playStateInternal()); |
| 869 EXPECT_TRUE(std::isnan(animation->currentTime())); | 868 EXPECT_TRUE(std::isnan(animation->currentTime())); |
| 870 EXPECT_TRUE(std::isnan(animation->startTime())); | 869 EXPECT_TRUE(std::isnan(animation->startTime())); |
| 871 animation->pause(); | 870 animation->pause(); |
| 872 EXPECT_EQ(Animation::Idle, animation->playStateInternal()); | 871 EXPECT_EQ(Animation::Idle, animation->playStateInternal()); |
| 873 EXPECT_TRUE(std::isnan(animation->currentTime())); | 872 EXPECT_TRUE(std::isnan(animation->currentTime())); |
| 874 EXPECT_TRUE(std::isnan(animation->startTime())); | 873 EXPECT_TRUE(std::isnan(animation->startTime())); |
| 875 } | 874 } |
| 876 | 875 |
| 877 } // namespace blink | 876 } // namespace blink |
| OLD | NEW |