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

Unified Diff: cc/layer_animation_controller.h

Issue 12517003: cc: Chromify the Animation and LayerAnimationController classes (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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/layer.cc ('k') | cc/layer_animation_controller.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/layer_animation_controller.h
diff --git a/cc/layer_animation_controller.h b/cc/layer_animation_controller.h
index 464be36b5a37a9ab91668af9e049a6cf505581c2..1b427b7f7bab35c248f99706c16d14dd132a6910 100644
--- a/cc/layer_animation_controller.h
+++ b/cc/layer_animation_controller.h
@@ -17,9 +17,7 @@
#include "cc/scoped_ptr_vector.h"
#include "ui/gfx/transform.h"
-namespace gfx {
-class Transform;
-}
+namespace gfx { class Transform; }
namespace cc {
@@ -31,108 +29,126 @@ class LayerAnimationValueObserver;
class CC_EXPORT LayerAnimationController
: public base::RefCounted<LayerAnimationController>,
public LayerAnimationEventObserver {
-public:
- static scoped_refptr<LayerAnimationController> create(int id);
+ public:
+ static scoped_refptr<LayerAnimationController> Create(int id);
+
+ int id() const { return id_; }
+
+ // These methods are virtual for testing.
+ virtual void AddAnimation(scoped_ptr<Animation> animation);
+ virtual void PauseAnimation(int animation_id, double time_offset);
+ virtual void RemoveAnimation(int animation_id);
+ virtual void RemoveAnimation(int animation_id,
+ Animation::TargetProperty target_property);
+ virtual void SuspendAnimations(double monotonic_time);
+ virtual void ResumeAnimations(double monotonic_time);
+
+ // Ensures that the list of active animations on the main thread and the impl
+ // thread are kept in sync. This function does not take ownership of the impl
+ // thread controller.
+ virtual void PushAnimationUpdatesTo(
+ LayerAnimationController* controller_impl);
+
+ void Animate(double monotonic_time);
+ void AccumulatePropertyUpdates(double monotonic_time,
+ AnimationEventsVector* events);
+ void UpdateState(AnimationEventsVector* events);
+
+ // Returns the active animation in the given group, animating the given
+ // property, if such an animation exists.
+ Animation* GetAnimation(int group_id,
+ Animation::TargetProperty target_property) const;
+
+ // Returns the active animation animating the given property that is either
+ // running, or is next to run, if such an animation exists.
+ Animation* GetAnimation(Animation::TargetProperty target_property) const;
+
+ // Returns true if there are any animations that have neither finished nor
+ // aborted.
+ bool HasActiveAnimation() const;
+
+ // Returns true if there are any animations at all to process.
+ bool has_any_animation() const { return !active_animations_.empty(); }
+
+ // Returns true if there is an animation currently animating the given
+ // property, or if there is an animation scheduled to animate this property in
+ // the future.
+ bool IsAnimatingProperty(Animation::TargetProperty target_property) const;
+
+ // This is called in response to an animation being started on the impl
+ // thread. This function updates the corresponding main thread animation's
+ // start time.
+ virtual void OnAnimationStarted(const AnimationEvent& event) OVERRIDE;
+
+ // If a sync is forced, then the next time animation updates are pushed to the
+ // impl thread, all animations will be transferred.
+ void set_force_sync() { force_sync_ = true; }
+
+ void SetAnimationRegistrar(AnimationRegistrar* registrar);
+ AnimationRegistrar* animation_registrar() { return registrar_; }
+
+ void AddObserver(LayerAnimationValueObserver* observer);
+ void RemoveObserver(LayerAnimationValueObserver* observer);
+
+ protected:
+ friend class base::RefCounted<LayerAnimationController>;
+
+ LayerAnimationController(int id);
+ virtual ~LayerAnimationController();
+
+ private:
+ typedef base::hash_set<int> TargetProperties;
+
+ void PushNewAnimationsToImplThread(
+ LayerAnimationController* controller_impl) const;
+ void RemoveAnimationsCompletedOnMainThread(
+ LayerAnimationController* controller_impl) const;
+ void PushPropertiesToImplThread(
+ LayerAnimationController* controller_impl) const;
+ void ReplaceImplThreadAnimations(
+ LayerAnimationController* controller_impl) const;
+
+ void StartAnimationsWaitingForNextTick(double monotonic_time);
+ void StartAnimationsWaitingForStartTime(double monotonic_time);
+ void StartAnimationsWaitingForTargetAvailability(double monotonic_time);
+ void ResolveConflicts(double monotonic_time);
+ void PromoteStartedAnimations(double monotonic_time,
+ AnimationEventsVector* events);
+ void MarkFinishedAnimations(double monotonic_time);
+ void MarkAnimationsForDeletion(double monotonic_time,
+ AnimationEventsVector* events);
+ void PurgeAnimationsMarkedForDeletion();
+
+ void TickAnimations(double monotonic_time);
+
+ enum UpdateActivationType {
+ NormalActivation,
+ ForceActivation
+ };
+ void UpdateActivation(UpdateActivationType type);
+
+ void NotifyObserversOpacityAnimated(float opacity);
+ void NotifyObserversTransformAnimated(const gfx::Transform& transform);
+
+ bool HasActiveObserver();
+
+ // If this is true, we force a sync to the impl thread.
+ bool force_sync_;
+
+ AnimationRegistrar* registrar_;
+ int id_;
+ ScopedPtrVector<Animation> active_animations_;
+
+ // This is used to ensure that we don't spam the registrar.
+ bool is_active_;
- int id() const { return m_id; }
+ double last_tick_time_;
+
+ ObserverList<LayerAnimationValueObserver> observers_;
- // These methods are virtual for testing.
- virtual void addAnimation(scoped_ptr<Animation>);
- virtual void pauseAnimation(int animationId, double timeOffset);
- virtual void removeAnimation(int animationId);
- virtual void removeAnimation(int animationId, Animation::TargetProperty);
- virtual void suspendAnimations(double monotonicTime);
- virtual void resumeAnimations(double monotonicTime);
-
- // Ensures that the list of active animations on the main thread and the impl thread
- // are kept in sync. This function does not take ownership of the impl thread controller.
- virtual void pushAnimationUpdatesTo(LayerAnimationController*);
-
- void animate(double monotonicTime);
- void accumulatePropertyUpdates(double monotonicTime, AnimationEventsVector*);
- void updateState(AnimationEventsVector*);
-
- // Returns the active animation in the given group, animating the given property, if such an
- // animation exists.
- Animation* getAnimation(int groupId, Animation::TargetProperty) const;
-
- // Returns the active animation animating the given property that is either running, or is
- // next to run, if such an animation exists.
- Animation* getAnimation(Animation::TargetProperty) const;
-
- // Returns true if there are any animations that have neither finished nor aborted.
- bool hasActiveAnimation() const;
-
- // Returns true if there are any animations at all to process.
- bool hasAnyAnimation() const { return !m_activeAnimations.empty(); }
-
- // Returns true if there is an animation currently animating the given property, or
- // if there is an animation scheduled to animate this property in the future.
- bool isAnimatingProperty(Animation::TargetProperty) const;
-
- // This is called in response to an animation being started on the impl thread. This
- // function updates the corresponding main thread animation's start time.
- virtual void OnAnimationStarted(const AnimationEvent&) OVERRIDE;
-
- // If a sync is forced, then the next time animation updates are pushed to the impl
- // thread, all animations will be transferred.
- void setForceSync() { m_forceSync = true; }
-
- void setAnimationRegistrar(AnimationRegistrar*);
- AnimationRegistrar* animationRegistrar() { return m_registrar; }
-
- void addObserver(LayerAnimationValueObserver*);
- void removeObserver(LayerAnimationValueObserver*);
-
-protected:
- friend class base::RefCounted<LayerAnimationController>;
-
- LayerAnimationController(int id);
- virtual ~LayerAnimationController();
-
-private:
- typedef base::hash_set<int> TargetProperties;
-
- void pushNewAnimationsToImplThread(LayerAnimationController*) const;
- void removeAnimationsCompletedOnMainThread(LayerAnimationController*) const;
- void pushPropertiesToImplThread(LayerAnimationController*) const;
- void replaceImplThreadAnimations(LayerAnimationController*) const;
-
- void startAnimationsWaitingForNextTick(double monotonicTime);
- void startAnimationsWaitingForStartTime(double monotonicTime);
- void startAnimationsWaitingForTargetAvailability(double monotonicTime);
- void resolveConflicts(double monotonicTime);
- void promoteStartedAnimations(double monotonicTime, AnimationEventsVector*);
- void markFinishedAnimations(double monotonicTime);
- void markAnimationsForDeletion(double monotonicTime, AnimationEventsVector*);
- void purgeAnimationsMarkedForDeletion();
-
- void tickAnimations(double monotonicTime);
-
- void updateActivation(bool force = false);
-
- void notifyObserversOpacityAnimated(float opacity);
- void notifyObserversTransformAnimated(const gfx::Transform& transform);
-
- bool hasActiveObserver();
-
- // If this is true, we force a sync to the impl thread.
- bool m_forceSync;
-
- AnimationRegistrar* m_registrar;
- int m_id;
- ScopedPtrVector<Animation> m_activeAnimations;
-
- // This is used to ensure that we don't spam the registrar.
- bool m_isActive;
-
- double m_lastTickTime;
-
- ObserverList<LayerAnimationValueObserver> m_observers;
-
- DISALLOW_COPY_AND_ASSIGN(LayerAnimationController);
+ DISALLOW_COPY_AND_ASSIGN(LayerAnimationController);
};
-} // namespace cc
+} // namespace cc
#endif // CC_LAYER_ANIMATION_CONTROLLER_H_
« no previous file with comments | « cc/layer.cc ('k') | cc/layer_animation_controller.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698