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