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

Side by Side Diff: cc/layer_animation_controller.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: Fixed nits, patch for submission. 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
« no previous file with comments | « cc/layer_animation_controller.h ('k') | cc/layer_animation_controller_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <algorithm> 7 #include <algorithm>
8 8
9 #include "cc/animation.h" 9 #include "cc/animation.h"
10 #include "cc/animation_registrar.h" 10 #include "cc/animation_registrar.h"
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 return; 118 return;
119 119
120 startAnimationsWaitingForNextTick(monotonicTime); 120 startAnimationsWaitingForNextTick(monotonicTime);
121 startAnimationsWaitingForStartTime(monotonicTime); 121 startAnimationsWaitingForStartTime(monotonicTime);
122 startAnimationsWaitingForTargetAvailability(monotonicTime); 122 startAnimationsWaitingForTargetAvailability(monotonicTime);
123 resolveConflicts(monotonicTime); 123 resolveConflicts(monotonicTime);
124 tickAnimations(monotonicTime); 124 tickAnimations(monotonicTime);
125 m_lastTickTime = monotonicTime; 125 m_lastTickTime = monotonicTime;
126 } 126 }
127 127
128 void LayerAnimationController::accumulatePropertyUpdates(double monotonicTime,
129 AnimationEventsVector* events)
130 {
131 if (!events)
132 return;
133
134 for (size_t i = 0; i < m_activeAnimations.size(); ++i) {
135 Animation* animation = m_activeAnimations[i];
136 if (!animation->isImplOnly())
137 continue;
138
139 if (animation->targetProperty() == Animation::Opacity) {
140 AnimationEvent event(AnimationEvent::PropertyUpdate,
141 m_id, animation->group(),
142 Animation::Opacity, monotonicTime);
143 event.opacity = animation->curve()->toFloatAnimationCurve()->getValu e(monotonicTime);
144
145 events->push_back(event);
146 }
147 else if (animation->targetProperty() == Animation::Transform) {
148 AnimationEvent event(AnimationEvent::PropertyUpdate,
149 m_id, animation->group(),
150 Animation::Transform, monotonicTime);
151 event.transform = animation->curve()->toTransformAnimationCurve()->g etValue(monotonicTime);
152 events->push_back(event);
153 }
154 }
155 }
156
128 void LayerAnimationController::updateState(AnimationEventsVector* events) 157 void LayerAnimationController::updateState(AnimationEventsVector* events)
129 { 158 {
130 if (!hasActiveObserver()) 159 if (!hasActiveObserver())
131 return; 160 return;
132 161
133 promoteStartedAnimations(m_lastTickTime, events); 162 promoteStartedAnimations(m_lastTickTime, events);
134 markFinishedAnimations(m_lastTickTime); 163 markFinishedAnimations(m_lastTickTime);
135 markAnimationsForDeletion(m_lastTickTime, events); 164 markAnimationsForDeletion(m_lastTickTime, events);
136 startAnimationsWaitingForTargetAvailability(m_lastTickTime); 165 startAnimationsWaitingForTargetAvailability(m_lastTickTime);
137 promoteStartedAnimations(m_lastTickTime, events); 166 promoteStartedAnimations(m_lastTickTime, events);
138 167
168 accumulatePropertyUpdates(m_lastTickTime, events);
169
139 updateActivation(); 170 updateActivation();
140 } 171 }
141 172
142 void LayerAnimationController::addAnimation(scoped_ptr<Animation> animation) 173 void LayerAnimationController::addAnimation(scoped_ptr<Animation> animation)
143 { 174 {
144 m_activeAnimations.push_back(animation.Pass()); 175 m_activeAnimations.push_back(animation.Pass());
145 updateActivation(); 176 updateActivation();
146 } 177 }
147 178
148 Animation* LayerAnimationController::getAnimation(int groupId, Animation::Target Property targetProperty) const 179 Animation* LayerAnimationController::getAnimation(int groupId, Animation::Target Property targetProperty) const
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 Animation::RunState initialRunState = Animation::WaitingForTargetAvailab ility; 269 Animation::RunState initialRunState = Animation::WaitingForTargetAvailab ility;
239 double startTime = 0; 270 double startTime = 0;
240 scoped_ptr<Animation> toAdd(m_activeAnimations[i]->cloneAndInitialize(An imation::ControllingInstance, initialRunState, startTime)); 271 scoped_ptr<Animation> toAdd(m_activeAnimations[i]->cloneAndInitialize(An imation::ControllingInstance, initialRunState, startTime));
241 DCHECK(!toAdd->needsSynchronizedStartTime()); 272 DCHECK(!toAdd->needsSynchronizedStartTime());
242 controllerImpl->addAnimation(toAdd.Pass()); 273 controllerImpl->addAnimation(toAdd.Pass());
243 } 274 }
244 } 275 }
245 276
246 struct IsCompleted { 277 struct IsCompleted {
247 IsCompleted(const LayerAnimationController& mainThreadController) : m_mainTh readController(mainThreadController) { } 278 IsCompleted(const LayerAnimationController& mainThreadController) : m_mainTh readController(mainThreadController) { }
248 bool operator()(Animation* animation) const { return !m_mainThreadController .getAnimation(animation->group(), animation->targetProperty()); } 279 bool operator()(Animation* animation) const {
280 if (animation->isImplOnly())
281 return false;
282 return !m_mainThreadController.getAnimation(animation->group(), animatio n->targetProperty()); }
249 private: 283 private:
250 const LayerAnimationController& m_mainThreadController; 284 const LayerAnimationController& m_mainThreadController;
251 }; 285 };
252 286
253 void LayerAnimationController::removeAnimationsCompletedOnMainThread(LayerAnimat ionController* controllerImpl) const 287 void LayerAnimationController::removeAnimationsCompletedOnMainThread(LayerAnimat ionController* controllerImpl) const
254 { 288 {
255 // Delete all impl thread animations for which there is no corresponding mai n thread animation. 289 // Delete all impl thread animations for which there is no corresponding mai n thread animation.
256 // Each iteration, controller->m_activeAnimations.size() is decremented or i is incremented 290 // Each iteration, controller->m_activeAnimations.size() is decremented or i is incremented
257 // guaranteeing progress towards loop termination. 291 // guaranteeing progress towards loop termination.
258 ScopedPtrVector<Animation>& animations = controllerImpl->m_activeAnimations; 292 ScopedPtrVector<Animation>& animations = controllerImpl->m_activeAnimations;
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
496 ObserverListBase<LayerAnimationValueObserver>::Iterator it(m_observers); 530 ObserverListBase<LayerAnimationValueObserver>::Iterator it(m_observers);
497 LayerAnimationValueObserver* obs; 531 LayerAnimationValueObserver* obs;
498 while ((obs = it.GetNext()) != NULL) 532 while ((obs = it.GetNext()) != NULL)
499 if (obs->IsActive()) 533 if (obs->IsActive())
500 return true; 534 return true;
501 } 535 }
502 return false; 536 return false;
503 } 537 }
504 538
505 } // namespace cc 539 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layer_animation_controller.h ('k') | cc/layer_animation_controller_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698