OLD | NEW |
---|---|
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "cc/animation/element_animations.h" | 5 #include "cc/animation/element_animations.h" |
6 | 6 |
7 #include "cc/animation/animation_delegate.h" | 7 #include "cc/animation/animation_delegate.h" |
8 #include "cc/animation/animation_host.h" | 8 #include "cc/animation/animation_host.h" |
9 #include "cc/animation/animation_id_provider.h" | 9 #include "cc/animation/animation_id_provider.h" |
10 #include "cc/animation/animation_player.h" | 10 #include "cc/animation/animation_player.h" |
(...skipping 2907 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2918 | 2918 |
2919 animations_impl->Animate(kInitialTickTime + | 2919 animations_impl->Animate(kInitialTickTime + |
2920 TimeDelta::FromMilliseconds(4000)); | 2920 TimeDelta::FromMilliseconds(4000)); |
2921 animations_impl->UpdateState(true, events.get()); | 2921 animations_impl->UpdateState(true, events.get()); |
2922 | 2922 |
2923 animations->NotifyAnimationAborted(events->events_[0]); | 2923 animations->NotifyAnimationAborted(events->events_[0]); |
2924 EXPECT_FALSE( | 2924 EXPECT_FALSE( |
2925 client_.GetTransformIsAnimating(element_id_, ElementListType::ACTIVE)); | 2925 client_.GetTransformIsAnimating(element_id_, ElementListType::ACTIVE)); |
2926 } | 2926 } |
2927 | 2927 |
2928 TEST_F(ElementAnimationsTest, ObserverNotifiedWhenOpacityAnimationChanges) { | |
2929 CreateTestLayer(true, true); | |
2930 AttachTimelinePlayerLayer(); | |
2931 CreateImplTimelineAndPlayer(); | |
2932 | |
2933 scoped_refptr<ElementAnimations> animations = element_animations(); | |
2934 scoped_refptr<ElementAnimations> animations_impl = element_animations_impl(); | |
2935 | |
2936 auto events = host_impl_->CreateEvents(); | |
2937 | |
2938 EXPECT_FALSE(client_.GetHasPotentialOpacityAnimation( | |
2939 element_id_, ElementListType::ACTIVE)); | |
2940 EXPECT_FALSE(client_.GetOpacityIsCurrentlyAnimating(element_id_, | |
2941 ElementListType::ACTIVE)); | |
2942 EXPECT_FALSE(client_impl_.GetHasPotentialOpacityAnimation( | |
2943 element_id_, ElementListType::PENDING)); | |
2944 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating( | |
2945 element_id_, ElementListType::PENDING)); | |
2946 EXPECT_FALSE(client_impl_.GetHasPotentialOpacityAnimation( | |
2947 element_id_, ElementListType::ACTIVE)); | |
2948 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating( | |
2949 element_id_, ElementListType::ACTIVE)); | |
2950 | |
2951 // Case 1: An animation that's allowed to run until its finish point. | |
2952 AddOpacityTransitionToElementAnimations(animations.get(), 1.0, 0.f, 1.f, | |
2953 false /*use_timing_function*/); | |
2954 EXPECT_TRUE(client_.GetHasPotentialOpacityAnimation(element_id_, | |
2955 ElementListType::ACTIVE)); | |
2956 EXPECT_TRUE(client_.GetOpacityIsCurrentlyAnimating(element_id_, | |
2957 ElementListType::ACTIVE)); | |
2958 | |
2959 animations->PushPropertiesTo(animations_impl.get()); | |
2960 EXPECT_TRUE(client_impl_.GetHasPotentialOpacityAnimation( | |
2961 element_id_, ElementListType::PENDING)); | |
2962 EXPECT_TRUE(client_impl_.GetOpacityIsCurrentlyAnimating( | |
2963 element_id_, ElementListType::PENDING)); | |
2964 EXPECT_FALSE(client_impl_.GetHasPotentialOpacityAnimation( | |
2965 element_id_, ElementListType::ACTIVE)); | |
2966 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating( | |
2967 element_id_, ElementListType::ACTIVE)); | |
2968 | |
2969 animations_impl->ActivateAnimations(); | |
2970 EXPECT_TRUE(client_impl_.GetHasPotentialOpacityAnimation( | |
2971 element_id_, ElementListType::PENDING)); | |
2972 EXPECT_TRUE(client_impl_.GetOpacityIsCurrentlyAnimating( | |
2973 element_id_, ElementListType::PENDING)); | |
2974 EXPECT_TRUE(client_impl_.GetHasPotentialOpacityAnimation( | |
2975 element_id_, ElementListType::ACTIVE)); | |
2976 EXPECT_TRUE(client_impl_.GetOpacityIsCurrentlyAnimating( | |
2977 element_id_, ElementListType::ACTIVE)); | |
2978 | |
2979 animations_impl->Animate(kInitialTickTime); | |
2980 animations_impl->UpdateState(true, events.get()); | |
2981 | |
2982 animations->NotifyAnimationStarted(events->events_[0]); | |
2983 events->events_.clear(); | |
2984 | |
2985 // Finish the animation. | |
2986 animations->Animate(kInitialTickTime + TimeDelta::FromMilliseconds(1000)); | |
2987 animations->UpdateState(true, nullptr); | |
2988 EXPECT_FALSE(client_.GetHasPotentialOpacityAnimation( | |
2989 element_id_, ElementListType::ACTIVE)); | |
2990 EXPECT_FALSE(client_.GetOpacityIsCurrentlyAnimating(element_id_, | |
2991 ElementListType::ACTIVE)); | |
2992 | |
2993 animations->PushPropertiesTo(animations_impl.get()); | |
2994 | |
2995 // animations_impl hasn't yet ticked at/past the end of the animation. | |
2996 EXPECT_TRUE(client_impl_.GetHasPotentialOpacityAnimation( | |
2997 element_id_, ElementListType::PENDING)); | |
2998 EXPECT_TRUE(client_impl_.GetOpacityIsCurrentlyAnimating( | |
2999 element_id_, ElementListType::PENDING)); | |
3000 EXPECT_TRUE(client_impl_.GetHasPotentialOpacityAnimation( | |
3001 element_id_, ElementListType::ACTIVE)); | |
3002 EXPECT_TRUE(client_impl_.GetOpacityIsCurrentlyAnimating( | |
3003 element_id_, ElementListType::ACTIVE)); | |
3004 | |
3005 animations_impl->Animate(kInitialTickTime + | |
3006 TimeDelta::FromMilliseconds(1000)); | |
3007 animations_impl->UpdateState(true, events.get()); | |
3008 EXPECT_FALSE(client_impl_.GetHasPotentialOpacityAnimation( | |
3009 element_id_, ElementListType::PENDING)); | |
3010 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating( | |
3011 element_id_, ElementListType::PENDING)); | |
3012 EXPECT_FALSE(client_impl_.GetHasPotentialOpacityAnimation( | |
3013 element_id_, ElementListType::ACTIVE)); | |
3014 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating( | |
3015 element_id_, ElementListType::ACTIVE)); | |
3016 | |
3017 // Case 2: An animation that's removed before it finishes. | |
3018 int animation_id = AddOpacityTransitionToElementAnimations( | |
3019 animations.get(), 10.0, 0.f, 1.f, false /*use_timing_function*/); | |
3020 EXPECT_TRUE(client_.GetHasPotentialOpacityAnimation(element_id_, | |
3021 ElementListType::ACTIVE)); | |
3022 EXPECT_TRUE(client_.GetOpacityIsCurrentlyAnimating(element_id_, | |
3023 ElementListType::ACTIVE)); | |
3024 | |
3025 animations->PushPropertiesTo(animations_impl.get()); | |
3026 EXPECT_TRUE(client_impl_.GetHasPotentialOpacityAnimation( | |
3027 element_id_, ElementListType::PENDING)); | |
3028 EXPECT_TRUE(client_impl_.GetOpacityIsCurrentlyAnimating( | |
3029 element_id_, ElementListType::PENDING)); | |
3030 EXPECT_FALSE(client_impl_.GetHasPotentialOpacityAnimation( | |
3031 element_id_, ElementListType::ACTIVE)); | |
3032 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating( | |
3033 element_id_, ElementListType::ACTIVE)); | |
3034 | |
3035 animations_impl->ActivateAnimations(); | |
3036 EXPECT_TRUE(client_impl_.GetHasPotentialOpacityAnimation( | |
3037 element_id_, ElementListType::ACTIVE)); | |
3038 EXPECT_TRUE(client_impl_.GetOpacityIsCurrentlyAnimating( | |
3039 element_id_, ElementListType::ACTIVE)); | |
3040 | |
3041 animations_impl->Animate(kInitialTickTime + | |
3042 TimeDelta::FromMilliseconds(2000)); | |
3043 animations_impl->UpdateState(true, events.get()); | |
3044 | |
3045 animations->NotifyAnimationStarted(events->events_[0]); | |
3046 events->events_.clear(); | |
3047 | |
3048 animations->RemoveAnimation(animation_id); | |
3049 EXPECT_FALSE(client_.GetHasPotentialOpacityAnimation( | |
3050 element_id_, ElementListType::ACTIVE)); | |
3051 EXPECT_FALSE(client_.GetOpacityIsCurrentlyAnimating(element_id_, | |
3052 ElementListType::ACTIVE)); | |
3053 | |
3054 animations->PushPropertiesTo(animations_impl.get()); | |
3055 EXPECT_FALSE(client_impl_.GetHasPotentialOpacityAnimation( | |
3056 element_id_, ElementListType::PENDING)); | |
3057 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating( | |
3058 element_id_, ElementListType::PENDING)); | |
3059 EXPECT_TRUE(client_impl_.GetHasPotentialOpacityAnimation( | |
3060 element_id_, ElementListType::ACTIVE)); | |
3061 EXPECT_TRUE(client_impl_.GetOpacityIsCurrentlyAnimating( | |
3062 element_id_, ElementListType::ACTIVE)); | |
3063 | |
3064 animations_impl->ActivateAnimations(); | |
3065 EXPECT_FALSE(client_impl_.GetHasPotentialOpacityAnimation( | |
3066 element_id_, ElementListType::ACTIVE)); | |
3067 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating( | |
3068 element_id_, ElementListType::ACTIVE)); | |
3069 | |
3070 // Case 3: An animation that's aborted before it finishes. | |
3071 animation_id = AddOpacityTransitionToElementAnimations( | |
3072 animations.get(), 10.0, 0.f, 0.5f, false /*use_timing_function*/); | |
3073 EXPECT_TRUE(client_.GetHasPotentialOpacityAnimation(element_id_, | |
3074 ElementListType::ACTIVE)); | |
3075 EXPECT_TRUE(client_.GetOpacityIsCurrentlyAnimating(element_id_, | |
3076 ElementListType::ACTIVE)); | |
3077 | |
3078 animations->PushPropertiesTo(animations_impl.get()); | |
3079 EXPECT_TRUE(client_impl_.GetHasPotentialOpacityAnimation( | |
3080 element_id_, ElementListType::PENDING)); | |
3081 EXPECT_TRUE(client_impl_.GetOpacityIsCurrentlyAnimating( | |
3082 element_id_, ElementListType::PENDING)); | |
3083 EXPECT_FALSE(client_impl_.GetHasPotentialOpacityAnimation( | |
3084 element_id_, ElementListType::ACTIVE)); | |
3085 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating( | |
3086 element_id_, ElementListType::ACTIVE)); | |
3087 | |
3088 animations_impl->ActivateAnimations(); | |
3089 EXPECT_TRUE(client_impl_.GetHasPotentialOpacityAnimation( | |
3090 element_id_, ElementListType::ACTIVE)); | |
3091 EXPECT_TRUE(client_impl_.GetOpacityIsCurrentlyAnimating( | |
3092 element_id_, ElementListType::ACTIVE)); | |
3093 | |
3094 animations_impl->Animate(kInitialTickTime + | |
3095 TimeDelta::FromMilliseconds(2000)); | |
3096 animations_impl->UpdateState(true, events.get()); | |
3097 | |
3098 animations->NotifyAnimationStarted(events->events_[0]); | |
3099 events->events_.clear(); | |
3100 | |
3101 animations_impl->AbortAnimations(TargetProperty::OPACITY); | |
3102 EXPECT_FALSE(client_impl_.GetHasPotentialOpacityAnimation( | |
3103 element_id_, ElementListType::PENDING)); | |
3104 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating( | |
3105 element_id_, ElementListType::PENDING)); | |
3106 EXPECT_FALSE(client_impl_.GetHasPotentialOpacityAnimation( | |
3107 element_id_, ElementListType::ACTIVE)); | |
3108 EXPECT_FALSE(client_impl_.GetOpacityIsCurrentlyAnimating( | |
3109 element_id_, ElementListType::ACTIVE)); | |
3110 | |
3111 animations_impl->Animate(kInitialTickTime + | |
3112 TimeDelta::FromMilliseconds(4000)); | |
3113 animations_impl->UpdateState(true, events.get()); | |
3114 | |
3115 animations->NotifyAnimationAborted(events->events_[0]); | |
3116 EXPECT_FALSE(client_.GetHasPotentialOpacityAnimation( | |
3117 element_id_, ElementListType::ACTIVE)); | |
3118 EXPECT_FALSE(client_.GetOpacityIsCurrentlyAnimating(element_id_, | |
3119 ElementListType::ACTIVE)); | |
ajuma
2016/05/09 16:56:55
Please also test the case where potentially-animat
jaydasika
2016/05/10 20:22:29
Done.
| |
3120 } | |
3121 | |
2928 TEST_F(ElementAnimationsTest, ClippedOpacityValues) { | 3122 TEST_F(ElementAnimationsTest, ClippedOpacityValues) { |
2929 CreateTestLayer(false, false); | 3123 CreateTestLayer(false, false); |
2930 AttachTimelinePlayerLayer(); | 3124 AttachTimelinePlayerLayer(); |
2931 | 3125 |
2932 scoped_refptr<ElementAnimations> animations = element_animations(); | 3126 scoped_refptr<ElementAnimations> animations = element_animations(); |
2933 | 3127 |
2934 AddOpacityTransitionToElementAnimations(animations.get(), 1, 1.f, 2.f, true); | 3128 AddOpacityTransitionToElementAnimations(animations.get(), 1, 1.f, 2.f, true); |
2935 | 3129 |
2936 animations->Animate(kInitialTickTime); | 3130 animations->Animate(kInitialTickTime); |
2937 EXPECT_EQ(1.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); | 3131 EXPECT_EQ(1.f, client_.GetOpacity(element_id_, ElementListType::ACTIVE)); |
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3240 EXPECT_FALSE(animations->IsPotentiallyAnimatingProperty( | 3434 EXPECT_FALSE(animations->IsPotentiallyAnimatingProperty( |
3241 TargetProperty::OPACITY, ElementListType::ACTIVE)); | 3435 TargetProperty::OPACITY, ElementListType::ACTIVE)); |
3242 EXPECT_FALSE(animations->IsCurrentlyAnimatingProperty( | 3436 EXPECT_FALSE(animations->IsCurrentlyAnimatingProperty( |
3243 TargetProperty::OPACITY, ElementListType::PENDING)); | 3437 TargetProperty::OPACITY, ElementListType::PENDING)); |
3244 EXPECT_FALSE(animations->IsCurrentlyAnimatingProperty( | 3438 EXPECT_FALSE(animations->IsCurrentlyAnimatingProperty( |
3245 TargetProperty::OPACITY, ElementListType::ACTIVE)); | 3439 TargetProperty::OPACITY, ElementListType::ACTIVE)); |
3246 } | 3440 } |
3247 | 3441 |
3248 } // namespace | 3442 } // namespace |
3249 } // namespace cc | 3443 } // namespace cc |
OLD | NEW |