| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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_ANIMATION_PLAYER_H_ | 5 #ifndef CC_ANIMATION_ANIMATION_PLAYER_H_ |
| 6 #define CC_ANIMATION_ANIMATION_PLAYER_H_ | 6 #define CC_ANIMATION_ANIMATION_PLAYER_H_ |
| 7 | 7 |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/macros.h" | 10 #include "base/macros.h" |
| 11 #include "base/memory/ref_counted.h" | 11 #include "base/memory/ref_counted.h" |
| 12 #include "base/time/time.h" | 12 #include "base/time/time.h" |
| 13 #include "cc/animation/animation.h" | 13 #include "cc/animation/animation.h" |
| 14 #include "cc/animation/animation_curve.h" | 14 #include "cc/animation/animation_curve.h" |
| 15 #include "cc/animation/animation_export.h" | 15 #include "cc/animation/animation_export.h" |
| 16 #include "cc/animation/element_animations.h" | 16 #include "cc/animation/element_animations.h" |
| 17 #include "cc/trees/element_id.h" | 17 #include "cc/trees/element_id.h" |
| 18 | 18 |
| 19 namespace cc { | 19 namespace cc { |
| 20 | 20 |
| 21 class AnimationDelegate; | 21 class AnimationDelegate; |
| 22 class AnimationEvents; |
| 22 class AnimationHost; | 23 class AnimationHost; |
| 23 class AnimationTimeline; | 24 class AnimationTimeline; |
| 24 struct AnimationEvent; | 25 struct AnimationEvent; |
| 25 struct PropertyAnimationState; | 26 struct PropertyAnimationState; |
| 26 | 27 |
| 27 // An AnimationPlayer owns all animations to be run on particular CC Layer. | 28 // An AnimationPlayer owns all animations to be run on particular CC Layer. |
| 28 // Multiple AnimationPlayers can be attached to one layer. In this case, | 29 // Multiple AnimationPlayers can be attached to one layer. In this case, |
| 29 // they share common ElementAnimations so the | 30 // they share common ElementAnimations so the |
| 30 // ElementAnimations-to-Layer relationship is 1:1. | 31 // ElementAnimations-to-Layer relationship is 1:1. |
| 31 // For now, the blink logic is responsible for handling of conflicting | 32 // For now, the blink logic is responsible for handling of conflicting |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 68 | 69 |
| 69 void AddAnimation(std::unique_ptr<Animation> animation); | 70 void AddAnimation(std::unique_ptr<Animation> animation); |
| 70 void PauseAnimation(int animation_id, double time_offset); | 71 void PauseAnimation(int animation_id, double time_offset); |
| 71 void RemoveAnimation(int animation_id); | 72 void RemoveAnimation(int animation_id); |
| 72 void AbortAnimation(int animation_id); | 73 void AbortAnimation(int animation_id); |
| 73 void AbortAnimations(TargetProperty::Type target_property, | 74 void AbortAnimations(TargetProperty::Type target_property, |
| 74 bool needs_completion); | 75 bool needs_completion); |
| 75 | 76 |
| 76 void PushPropertiesTo(AnimationPlayer* player_impl); | 77 void PushPropertiesTo(AnimationPlayer* player_impl); |
| 77 | 78 |
| 79 void Animate(base::TimeTicks monotonic_time); |
| 80 void UpdateState(bool start_ready_animations, AnimationEvents* events); |
| 81 |
| 82 void UpdateActivation(ActivationType type); |
| 83 void Deactivate(); |
| 84 |
| 78 // AnimationDelegate routing. | 85 // AnimationDelegate routing. |
| 79 bool NotifyAnimationStarted(const AnimationEvent& event); | 86 bool NotifyAnimationStarted(const AnimationEvent& event); |
| 80 bool NotifyAnimationFinished(const AnimationEvent& event); | 87 bool NotifyAnimationFinished(const AnimationEvent& event); |
| 81 bool NotifyAnimationAborted(const AnimationEvent& event); | 88 bool NotifyAnimationAborted(const AnimationEvent& event); |
| 82 void NotifyAnimationTakeover(const AnimationEvent& event); | 89 void NotifyAnimationTakeover(const AnimationEvent& event); |
| 83 bool NotifyAnimationFinishedForTesting(TargetProperty::Type target_property, | 90 bool NotifyAnimationFinishedForTesting(TargetProperty::Type target_property, |
| 84 int group_id); | 91 int group_id); |
| 85 | 92 |
| 86 // Returns true if there are any animations that have neither finished nor | 93 // Returns true if there are any animations that have neither finished nor |
| 87 // aborted. | 94 // aborted. |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 145 // Returns the active animation animating the given property that is either | 152 // Returns the active animation animating the given property that is either |
| 146 // running, or is next to run, if such an animation exists. | 153 // running, or is next to run, if such an animation exists. |
| 147 Animation* GetAnimation(TargetProperty::Type target_property) const; | 154 Animation* GetAnimation(TargetProperty::Type target_property) const; |
| 148 | 155 |
| 149 // Returns the active animation for the given unique animation id. | 156 // Returns the active animation for the given unique animation id. |
| 150 Animation* GetAnimationById(int animation_id) const; | 157 Animation* GetAnimationById(int animation_id) const; |
| 151 | 158 |
| 152 void GetPropertyAnimationState(PropertyAnimationState* pending_state, | 159 void GetPropertyAnimationState(PropertyAnimationState* pending_state, |
| 153 PropertyAnimationState* active_state) const; | 160 PropertyAnimationState* active_state) const; |
| 154 | 161 |
| 162 // When a scroll animation is removed on the main thread, its compositor |
| 163 // thread counterpart continues producing scroll deltas until activation. |
| 164 // These scroll deltas need to be cleared at activation, so that the active |
| 165 // element's scroll offset matches the offset provided by the main thread |
| 166 // rather than a combination of this offset and scroll deltas produced by |
| 167 // the removed animation. This is to provide the illusion of synchronicity to |
| 168 // JS that simultaneously removes an animation and sets the scroll offset. |
| 169 bool scroll_offset_animation_was_interrupted() const { |
| 170 return scroll_offset_animation_was_interrupted_; |
| 171 } |
| 172 |
| 155 private: | 173 private: |
| 156 friend class base::RefCounted<AnimationPlayer>; | 174 friend class base::RefCounted<AnimationPlayer>; |
| 157 | 175 |
| 158 explicit AnimationPlayer(int id); | 176 explicit AnimationPlayer(int id); |
| 159 ~AnimationPlayer(); | 177 ~AnimationPlayer(); |
| 160 | 178 |
| 161 void SetNeedsCommit(); | 179 void SetNeedsCommit(); |
| 162 | 180 |
| 163 void RegisterPlayer(); | 181 void RegisterPlayer(); |
| 164 void UnregisterPlayer(); | 182 void UnregisterPlayer(); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 188 | 206 |
| 189 int id_; | 207 int id_; |
| 190 ElementId element_id_; | 208 ElementId element_id_; |
| 191 bool needs_push_properties_; | 209 bool needs_push_properties_; |
| 192 base::TimeTicks last_tick_time_; | 210 base::TimeTicks last_tick_time_; |
| 193 | 211 |
| 194 // Only try to start animations when new animations are added or when the | 212 // Only try to start animations when new animations are added or when the |
| 195 // previous attempt at starting animations failed to start all animations. | 213 // previous attempt at starting animations failed to start all animations. |
| 196 bool needs_to_start_animations_; | 214 bool needs_to_start_animations_; |
| 197 | 215 |
| 216 // This is used to ensure that we don't spam the animation host. |
| 217 bool is_active_; |
| 218 |
| 219 bool scroll_offset_animation_was_interrupted_; |
| 220 |
| 198 DISALLOW_COPY_AND_ASSIGN(AnimationPlayer); | 221 DISALLOW_COPY_AND_ASSIGN(AnimationPlayer); |
| 199 }; | 222 }; |
| 200 | 223 |
| 201 } // namespace cc | 224 } // namespace cc |
| 202 | 225 |
| 203 #endif // CC_ANIMATION_ANIMATION_PLAYER_H_ | 226 #endif // CC_ANIMATION_ANIMATION_PLAYER_H_ |
| OLD | NEW |