Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(676)

Side by Side Diff: cc/layer_animation_controller_unittest.cc

Issue 12453010: Allow impl-only animations, and return opacity values via AnimationEvents. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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/layer_animation_controller.h" 5 #include "cc/layer_animation_controller.h"
6 6
7 #include "cc/animation.h" 7 #include "cc/animation.h"
8 #include "cc/animation_curve.h" 8 #include "cc/animation_curve.h"
9 #include "cc/test/animation_test_common.h" 9 #include "cc/test/animation_test_common.h"
10 #include "testing/gmock/include/gmock/gmock.h" 10 #include "testing/gmock/include/gmock/gmock.h"
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 60
61 controller->pushAnimationUpdatesTo(controllerImpl.get()); 61 controller->pushAnimationUpdatesTo(controllerImpl.get());
62 62
63 EXPECT_TRUE(controllerImpl->getAnimation(0, Animation::Opacity)); 63 EXPECT_TRUE(controllerImpl->getAnimation(0, Animation::Opacity));
64 EXPECT_EQ(Animation::WaitingForTargetAvailability, controllerImpl->getAnimat ion(0, Animation::Opacity)->runState()); 64 EXPECT_EQ(Animation::WaitingForTargetAvailability, controllerImpl->getAnimat ion(0, Animation::Opacity)->runState());
65 65
66 AnimationEventsVector events; 66 AnimationEventsVector events;
67 controllerImpl->animate(1); 67 controllerImpl->animate(1);
68 controllerImpl->updateState(&events); 68 controllerImpl->updateState(&events);
69 69
70 // Synchronize the start times. 70 // Synchronize the start times. This will also have a property update
71 EXPECT_EQ(1u, events.size()); 71 // event for opacity.
72 EXPECT_EQ(2u, events.size());
72 controller->OnAnimationStarted(events[0]); 73 controller->OnAnimationStarted(events[0]);
73 EXPECT_EQ(controller->getAnimation(0, Animation::Opacity)->startTime(), cont rollerImpl->getAnimation(0, Animation::Opacity)->startTime()); 74 EXPECT_EQ(controller->getAnimation(0, Animation::Opacity)->startTime(), cont rollerImpl->getAnimation(0, Animation::Opacity)->startTime());
74 75
75 // Start the animation on the main thread. Should not affect the start time. 76 // Start the animation on the main thread. Should not affect the start time.
76 controller->animate(1.5); 77 controller->animate(1.5);
77 controller->updateState(0); 78 controller->updateState(0);
78 EXPECT_EQ(controller->getAnimation(0, Animation::Opacity)->startTime(), cont rollerImpl->getAnimation(0, Animation::Opacity)->startTime()); 79 EXPECT_EQ(controller->getAnimation(0, Animation::Opacity)->startTime(), cont rollerImpl->getAnimation(0, Animation::Opacity)->startTime());
79 } 80 }
80 81
81 TEST(LayerAnimationControllerTest, syncPauseAndResume) 82 TEST(LayerAnimationControllerTest, syncPauseAndResume)
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 150
150 EXPECT_FALSE(controllerImpl->getAnimation(animationId, Animation::Opacity)); 151 EXPECT_FALSE(controllerImpl->getAnimation(animationId, Animation::Opacity));
151 152
152 controller->pushAnimationUpdatesTo(controllerImpl.get()); 153 controller->pushAnimationUpdatesTo(controllerImpl.get());
153 154
154 // Even though the main thread has a 'new' animation, it should not be pushe d because the animation has already completed on the impl thread. 155 // Even though the main thread has a 'new' animation, it should not be pushe d because the animation has already completed on the impl thread.
155 EXPECT_FALSE(controllerImpl->getAnimation(animationId, Animation::Opacity)); 156 EXPECT_FALSE(controllerImpl->getAnimation(animationId, Animation::Opacity));
156 } 157 }
157 158
158 // Tests that transitioning opacity from 0 to 1 works as expected. 159 // Tests that transitioning opacity from 0 to 1 works as expected.
160
161 static const AnimationEvent* getLastPropertyUpdateOpacityEvent(const AnimationEv entsVector* events)
162 {
163 const AnimationEvent* event = 0;
164 for (size_t i = 0; i < events->size(); ++i)
165 if ((*events)[i].type == AnimationEvent::PropertyUpdate &&
166 (*events)[i].targetProperty == Animation::Opacity)
167 event = &(*events)[i];
168
169 return event;
170 }
171
Ian Vollick 2013/03/06 01:00:57 I would like 3 new tests rather than these tweaks
wjmaclean 2013/03/06 17:03:13 Now that non implOnly animations do not send back
159 TEST(LayerAnimationControllerTest, TrivialTransition) 172 TEST(LayerAnimationControllerTest, TrivialTransition)
160 { 173 {
161 scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEvents Vector)); 174 scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEvents Vector));
162 FakeLayerAnimationValueObserver dummy; 175 FakeLayerAnimationValueObserver dummy;
163 scoped_refptr<LayerAnimationController> controller(LayerAnimationController: :create(0)); 176 scoped_refptr<LayerAnimationController> controller(LayerAnimationController: :create(0));
164 controller->addObserver(&dummy); 177 controller->addObserver(&dummy);
165 178
166 scoped_ptr<Animation> toAdd(createAnimation(make_scoped_ptr(new FakeFloatTra nsition(1, 0, 1)).PassAs<AnimationCurve>(), 1, Animation::Opacity)); 179 scoped_ptr<Animation> toAdd(createAnimation(make_scoped_ptr(new FakeFloatTra nsition(1, 0, 1)).PassAs<AnimationCurve>(), 1, Animation::Opacity));
167 180
168 controller->addAnimation(toAdd.Pass()); 181 controller->addAnimation(toAdd.Pass());
169 controller->animate(0); 182 controller->animate(0);
170 controller->updateState(events.get()); 183 controller->updateState(events.get());
171 EXPECT_TRUE(controller->hasActiveAnimation()); 184 EXPECT_TRUE(controller->hasActiveAnimation());
172 EXPECT_EQ(0, dummy.opacity()); 185 EXPECT_EQ(0, dummy.opacity());
186 EXPECT_EQ(2, events->size());
187 const AnimationEvent* startOpacityEvent = getLastPropertyUpdateOpacityEvent( events.get());
188 ASSERT_TRUE(startOpacityEvent);
189 EXPECT_EQ(0, startOpacityEvent->value);
173 controller->animate(1); 190 controller->animate(1);
174 controller->updateState(events.get()); 191 controller->updateState(events.get());
175 EXPECT_EQ(1, dummy.opacity()); 192 EXPECT_EQ(1, dummy.opacity());
176 EXPECT_FALSE(controller->hasActiveAnimation()); 193 EXPECT_FALSE(controller->hasActiveAnimation());
194 EXPECT_EQ(4, events->size());
195 const AnimationEvent* endOpacityEvent = getLastPropertyUpdateOpacityEvent(ev ents.get());
196 ASSERT_TRUE(endOpacityEvent);
197 EXPECT_EQ(1, endOpacityEvent->value);
177 } 198 }
178 199
179 // Tests animations that are waiting for a synchronized start time do not finish . 200 // Tests animations that are waiting for a synchronized start time do not finish .
180 TEST(LayerAnimationControllerTest, AnimationsWaitingForStartTimeDoNotFinishIfThe yWaitLongerToStartThanTheirDuration) 201 TEST(LayerAnimationControllerTest, AnimationsWaitingForStartTimeDoNotFinishIfThe yWaitLongerToStartThanTheirDuration)
181 { 202 {
182 scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEvents Vector)); 203 scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEvents Vector));
183 FakeLayerAnimationValueObserver dummy; 204 FakeLayerAnimationValueObserver dummy;
184 scoped_refptr<LayerAnimationController> controller(LayerAnimationController: :create(0)); 205 scoped_refptr<LayerAnimationController> controller(LayerAnimationController: :create(0));
185 controller->addObserver(&dummy); 206 controller->addObserver(&dummy);
186 207
(...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after
633 654
634 controller->addAnimation(createAnimation(make_scoped_ptr(new FakeFloatTransi tion(1, 0, 1)).PassAs<AnimationCurve>(), 2, Animation::Opacity)); 655 controller->addAnimation(createAnimation(make_scoped_ptr(new FakeFloatTransi tion(1, 0, 1)).PassAs<AnimationCurve>(), 2, Animation::Opacity));
635 656
636 // Animate but don't updateState. 657 // Animate but don't updateState.
637 controller->animate(1); 658 controller->animate(1);
638 659
639 controller->animate(2); 660 controller->animate(2);
640 events.reset(new AnimationEventsVector); 661 events.reset(new AnimationEventsVector);
641 controller->updateState(events.get()); 662 controller->updateState(events.get());
642 663
643 // Should have one Started event and one Finished event. 664 // Should have one Started event, one Finished event, and one
644 EXPECT_EQ(2, events->size()); 665 // opacity property update event.
666 EXPECT_EQ(3, events->size());
645 EXPECT_NE((*events)[0].type, (*events)[1].type); 667 EXPECT_NE((*events)[0].type, (*events)[1].type);
668 EXPECT_NE((*events)[0].type, (*events)[2].type);
669 EXPECT_NE((*events)[1].type, (*events)[2].type);
646 670
647 // The float transition should still be at its starting point. 671 // The float transition should still be at its starting point.
648 EXPECT_TRUE(controller->hasActiveAnimation()); 672 EXPECT_TRUE(controller->hasActiveAnimation());
649 EXPECT_EQ(0, dummy.opacity()); 673 EXPECT_EQ(0, dummy.opacity());
650 674
651 controller->animate(3); 675 controller->animate(3);
652 controller->updateState(events.get()); 676 controller->updateState(events.get());
653 677
654 // The float tranisition should now be done. 678 // The float tranisition should now be done.
655 EXPECT_EQ(1, dummy.opacity()); 679 EXPECT_EQ(1, dummy.opacity());
656 EXPECT_FALSE(controller->hasActiveAnimation()); 680 EXPECT_FALSE(controller->hasActiveAnimation());
657 } 681 }
658 682
659 } // namespace 683 } // namespace
660 } // namespace cc 684 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698