| OLD | NEW |
| 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 #ifndef CC_ANIMATION_LAYER_ANIMATION_CONTROLLER_H_ | 5 #ifndef CC_ANIMATION_LAYER_ANIMATION_CONTROLLER_H_ |
| 6 #define CC_ANIMATION_LAYER_ANIMATION_CONTROLLER_H_ | 6 #define CC_ANIMATION_LAYER_ANIMATION_CONTROLLER_H_ |
| 7 | 7 |
| 8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
| 9 #include "base/containers/hash_tables.h" | 9 #include "base/containers/hash_tables.h" |
| 10 #include "base/memory/ref_counted.h" | 10 #include "base/memory/ref_counted.h" |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 132 | 132 |
| 133 bool HasOnlyTranslationTransforms() const; | 133 bool HasOnlyTranslationTransforms() const; |
| 134 | 134 |
| 135 bool AnimationsPreserveAxisAlignment() const; | 135 bool AnimationsPreserveAxisAlignment() const; |
| 136 | 136 |
| 137 // Sets |max_scale| to the maximum scale along any dimension at any | 137 // Sets |max_scale| to the maximum scale along any dimension at any |
| 138 // destination in active animations. Returns false if the maximum scale cannot | 138 // destination in active animations. Returns false if the maximum scale cannot |
| 139 // be computed. | 139 // be computed. |
| 140 bool MaximumTargetScale(float* max_scale) const; | 140 bool MaximumTargetScale(float* max_scale) const; |
| 141 | 141 |
| 142 // When a scroll animation is removed on the main thread, its compositor |
| 143 // thread counterpart continues producing scroll deltas until activation. |
| 144 // These scroll deltas need to be cleared at activation, so that the active |
| 145 // layer's scroll offset matches the offset provided by the main thread |
| 146 // rather than a combination of this offset and scroll deltas produced by |
| 147 // the removed animation. This is to provide the illusion of synchronicity to |
| 148 // JS that simultaneously removes an animation and sets the scroll offset. |
| 149 bool scroll_offset_animation_was_interrupted() const { |
| 150 return scroll_offset_animation_was_interrupted_; |
| 151 } |
| 152 |
| 142 bool needs_to_start_animations_for_testing() { | 153 bool needs_to_start_animations_for_testing() { |
| 143 return needs_to_start_animations_; | 154 return needs_to_start_animations_; |
| 144 } | 155 } |
| 145 | 156 |
| 146 protected: | 157 protected: |
| 147 friend class base::RefCounted<LayerAnimationController>; | 158 friend class base::RefCounted<LayerAnimationController>; |
| 148 | 159 |
| 149 explicit LayerAnimationController(int id); | 160 explicit LayerAnimationController(int id); |
| 150 virtual ~LayerAnimationController(); | 161 virtual ~LayerAnimationController(); |
| 151 | 162 |
| 152 private: | 163 private: |
| 153 typedef base::hash_set<int> TargetProperties; | 164 typedef base::hash_set<int> TargetProperties; |
| 154 | 165 |
| 155 void PushNewAnimationsToImplThread( | 166 void PushNewAnimationsToImplThread( |
| 156 LayerAnimationController* controller_impl) const; | 167 LayerAnimationController* controller_impl) const; |
| 157 void RemoveAnimationsCompletedOnMainThread( | 168 void RemoveAnimationsCompletedOnMainThread( |
| 158 LayerAnimationController* controller_impl) const; | 169 LayerAnimationController* controller_impl) const; |
| 159 void PushPropertiesToImplThread( | 170 void PushPropertiesToImplThread(LayerAnimationController* controller_impl); |
| 160 LayerAnimationController* controller_impl) const; | |
| 161 | 171 |
| 162 void StartAnimations(base::TimeTicks monotonic_time); | 172 void StartAnimations(base::TimeTicks monotonic_time); |
| 163 void PromoteStartedAnimations(base::TimeTicks monotonic_time, | 173 void PromoteStartedAnimations(base::TimeTicks monotonic_time, |
| 164 AnimationEventsVector* events); | 174 AnimationEventsVector* events); |
| 165 void MarkFinishedAnimations(base::TimeTicks monotonic_time); | 175 void MarkFinishedAnimations(base::TimeTicks monotonic_time); |
| 166 void MarkAnimationsForDeletion(base::TimeTicks monotonic_time, | 176 void MarkAnimationsForDeletion(base::TimeTicks monotonic_time, |
| 167 AnimationEventsVector* events); | 177 AnimationEventsVector* events); |
| 168 void PurgeAnimationsMarkedForDeletion(); | 178 void PurgeAnimationsMarkedForDeletion(); |
| 169 | 179 |
| 170 void TickAnimations(base::TimeTicks monotonic_time); | 180 void TickAnimations(base::TimeTicks monotonic_time); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 184 void NotifyObserversFilterAnimated(const FilterOperations& filter, | 194 void NotifyObserversFilterAnimated(const FilterOperations& filter, |
| 185 bool notify_active_observers, | 195 bool notify_active_observers, |
| 186 bool notify_pending_observers); | 196 bool notify_pending_observers); |
| 187 void NotifyObserversScrollOffsetAnimated( | 197 void NotifyObserversScrollOffsetAnimated( |
| 188 const gfx::ScrollOffset& scroll_offset, | 198 const gfx::ScrollOffset& scroll_offset, |
| 189 bool notify_active_observers, | 199 bool notify_active_observers, |
| 190 bool notify_pending_observers); | 200 bool notify_pending_observers); |
| 191 | 201 |
| 192 void NotifyObserversAnimationWaitingForDeletion(); | 202 void NotifyObserversAnimationWaitingForDeletion(); |
| 193 | 203 |
| 194 void NotifyObserversScrollOffsetAnimationRemoved(); | |
| 195 | |
| 196 bool HasValueObserver(); | 204 bool HasValueObserver(); |
| 197 bool HasActiveValueObserver(); | 205 bool HasActiveValueObserver(); |
| 198 | 206 |
| 199 AnimationRegistrar* registrar_; | 207 AnimationRegistrar* registrar_; |
| 200 int id_; | 208 int id_; |
| 201 ScopedPtrVector<Animation> animations_; | 209 ScopedPtrVector<Animation> animations_; |
| 202 | 210 |
| 203 // This is used to ensure that we don't spam the registrar. | 211 // This is used to ensure that we don't spam the registrar. |
| 204 bool is_active_; | 212 bool is_active_; |
| 205 | 213 |
| 206 base::TimeTicks last_tick_time_; | 214 base::TimeTicks last_tick_time_; |
| 207 | 215 |
| 208 ObserverList<LayerAnimationValueObserver> value_observers_; | 216 ObserverList<LayerAnimationValueObserver> value_observers_; |
| 209 ObserverList<LayerAnimationEventObserver> event_observers_; | 217 ObserverList<LayerAnimationEventObserver> event_observers_; |
| 210 | 218 |
| 211 LayerAnimationValueProvider* value_provider_; | 219 LayerAnimationValueProvider* value_provider_; |
| 212 | 220 |
| 213 AnimationDelegate* layer_animation_delegate_; | 221 AnimationDelegate* layer_animation_delegate_; |
| 214 | 222 |
| 215 // Only try to start animations when new animations are added or when the | 223 // Only try to start animations when new animations are added or when the |
| 216 // previous attempt at starting animations failed to start all animations. | 224 // previous attempt at starting animations failed to start all animations. |
| 217 bool needs_to_start_animations_; | 225 bool needs_to_start_animations_; |
| 218 | 226 |
| 227 bool scroll_offset_animation_was_interrupted_; |
| 228 |
| 219 DISALLOW_COPY_AND_ASSIGN(LayerAnimationController); | 229 DISALLOW_COPY_AND_ASSIGN(LayerAnimationController); |
| 220 }; | 230 }; |
| 221 | 231 |
| 222 } // namespace cc | 232 } // namespace cc |
| 223 | 233 |
| 224 #endif // CC_ANIMATION_LAYER_ANIMATION_CONTROLLER_H_ | 234 #endif // CC_ANIMATION_LAYER_ANIMATION_CONTROLLER_H_ |
| OLD | NEW |