| 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_
|
|
|