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

Side by Side Diff: cc/animation/element_animations.h

Issue 2538973002: CC Animation: Make AnimationPlayer to be a unit of activation. (Closed)
Patch Set: Move ScrollOffsetAnimationWasInterrupted to AnimationPlayer Created 4 years 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
OLDNEW
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_ELEMENT_ANIMATIONS_H_ 5 #ifndef CC_ANIMATION_ELEMENT_ANIMATIONS_H_
6 #define CC_ANIMATION_ELEMENT_ANIMATIONS_H_ 6 #define CC_ANIMATION_ELEMENT_ANIMATIONS_H_
7 7
8 #include <memory> 8 #include <memory>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/macros.h" 11 #include "base/macros.h"
12 #include "base/memory/ref_counted.h" 12 #include "base/memory/ref_counted.h"
13 #include "base/observer_list.h" 13 #include "base/observer_list.h"
14 #include "base/time/time.h"
15 #include "cc/animation/animation_export.h" 14 #include "cc/animation/animation_export.h"
16 #include "cc/trees/element_id.h" 15 #include "cc/trees/element_id.h"
17 #include "cc/trees/property_animation_state.h" 16 #include "cc/trees/property_animation_state.h"
18 #include "cc/trees/target_property.h" 17 #include "cc/trees/target_property.h"
19 #include "ui/gfx/geometry/scroll_offset.h" 18 #include "ui/gfx/geometry/scroll_offset.h"
20 #include "ui/gfx/transform.h" 19 #include "ui/gfx/transform.h"
21 20
22 namespace gfx { 21 namespace gfx {
23 class BoxF; 22 class BoxF;
24 } 23 }
25 24
26 namespace cc { 25 namespace cc {
27 26
28 class AnimationEvents;
29 class AnimationHost; 27 class AnimationHost;
30 class AnimationPlayer; 28 class AnimationPlayer;
31 class FilterOperations; 29 class FilterOperations;
32 enum class ElementListType; 30 enum class ElementListType;
33 struct AnimationEvent; 31 struct AnimationEvent;
34 32
33 enum class ActivationType { NORMAL, FORCE };
34
35 // An ElementAnimations owns a list of all AnimationPlayers, attached to 35 // An ElementAnimations owns a list of all AnimationPlayers, attached to
36 // the element. 36 // the element.
37 // This is a CC counterpart for blink::ElementAnimations (in 1:1 relationship). 37 // This is a CC counterpart for blink::ElementAnimations (in 1:1 relationship).
38 // No pointer to/from respective blink::ElementAnimations object for now. 38 // No pointer to/from respective blink::ElementAnimations object for now.
39 class CC_ANIMATION_EXPORT ElementAnimations 39 class CC_ANIMATION_EXPORT ElementAnimations
40 : public base::RefCounted<ElementAnimations> { 40 : public base::RefCounted<ElementAnimations> {
41 public: 41 public:
42 static scoped_refptr<ElementAnimations> Create(); 42 static scoped_refptr<ElementAnimations> Create();
43 43
44 ElementId element_id() const { return element_id_; } 44 ElementId element_id() const { return element_id_; }
(...skipping 16 matching lines...) Expand all
61 61
62 typedef base::ObserverList<AnimationPlayer> PlayersList; 62 typedef base::ObserverList<AnimationPlayer> PlayersList;
63 const PlayersList& players_list() const { return players_list_; } 63 const PlayersList& players_list() const { return players_list_; }
64 64
65 // Ensures that the list of active animations on the main thread and the impl 65 // Ensures that the list of active animations on the main thread and the impl
66 // thread are kept in sync. This function does not take ownership of the impl 66 // thread are kept in sync. This function does not take ownership of the impl
67 // thread ElementAnimations. 67 // thread ElementAnimations.
68 void PushPropertiesTo( 68 void PushPropertiesTo(
69 scoped_refptr<ElementAnimations> element_animations_impl) const; 69 scoped_refptr<ElementAnimations> element_animations_impl) const;
70 70
71 void Animate(base::TimeTicks monotonic_time);
72
73 void UpdateState(bool start_ready_animations, AnimationEvents* events);
74
75 // Make animations affect active elements if and only if they affect
76 // pending elements. Any animations that no longer affect any elements
77 // are deleted.
78 void ActivateAnimations();
79
80 // Returns true if there are any animations that have neither finished nor 71 // Returns true if there are any animations that have neither finished nor
81 // aborted. 72 // aborted.
82 bool HasActiveAnimation() const; 73 bool HasActiveAnimation() const;
83 74
84 // Returns true if there are any animations at all to process. 75 // Returns true if there are any animations at all to process.
85 bool HasAnyAnimation() const; 76 bool HasAnyAnimation() const;
86 77
87 bool HasAnyAnimationTargetingProperty(TargetProperty::Type property) const; 78 bool HasAnyAnimationTargetingProperty(TargetProperty::Type property) const;
88 79
89 // Returns true if there is an animation that is either currently animating 80 // Returns true if there is an animation that is either currently animating
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 // Sets |start_scale| to the maximum of starting animation scale along any 130 // Sets |start_scale| to the maximum of starting animation scale along any
140 // dimension at any destination in active animations. Returns false if the 131 // dimension at any destination in active animations. Returns false if the
141 // starting scale cannot be computed. 132 // starting scale cannot be computed.
142 bool AnimationStartScale(ElementListType list_type, float* start_scale) const; 133 bool AnimationStartScale(ElementListType list_type, float* start_scale) const;
143 134
144 // Sets |max_scale| to the maximum scale along any dimension at any 135 // Sets |max_scale| to the maximum scale along any dimension at any
145 // destination in active animations. Returns false if the maximum scale cannot 136 // destination in active animations. Returns false if the maximum scale cannot
146 // be computed. 137 // be computed.
147 bool MaximumTargetScale(ElementListType list_type, float* max_scale) const; 138 bool MaximumTargetScale(ElementListType list_type, float* max_scale) const;
148 139
149 // When a scroll animation is removed on the main thread, its compositor 140 bool ScrollOffsetAnimationWasInterrupted() const;
150 // thread counterpart continues producing scroll deltas until activation.
151 // These scroll deltas need to be cleared at activation, so that the active
152 // element's scroll offset matches the offset provided by the main thread
153 // rather than a combination of this offset and scroll deltas produced by
154 // the removed animation. This is to provide the illusion of synchronicity to
155 // JS that simultaneously removes an animation and sets the scroll offset.
156 bool scroll_offset_animation_was_interrupted() const {
157 return scroll_offset_animation_was_interrupted_;
158 }
159 void SetScrollOffsetAnimationWasInterrupted();
160 141
161 void SetNeedsPushProperties(); 142 void SetNeedsPushProperties();
162 bool needs_push_properties() const { return needs_push_properties_; } 143 bool needs_push_properties() const { return needs_push_properties_; }
163 144
164 void UpdateClientAnimationState(); 145 void UpdateClientAnimationState();
165 void SetNeedsUpdateImplClientState(); 146 void SetNeedsUpdateImplClientState();
166 147
167 void UpdateActivationNormal();
168
169 void NotifyClientOpacityAnimated(float opacity, 148 void NotifyClientOpacityAnimated(float opacity,
170 bool notify_active_elements, 149 bool notify_active_elements,
171 bool notify_pending_elements); 150 bool notify_pending_elements);
172 void NotifyClientTransformAnimated(const gfx::Transform& transform, 151 void NotifyClientTransformAnimated(const gfx::Transform& transform,
173 bool notify_active_elements, 152 bool notify_active_elements,
174 bool notify_pending_elements); 153 bool notify_pending_elements);
175 void NotifyClientFilterAnimated(const FilterOperations& filter, 154 void NotifyClientFilterAnimated(const FilterOperations& filter,
176 bool notify_active_elements, 155 bool notify_active_elements,
177 bool notify_pending_elements); 156 bool notify_pending_elements);
178 void NotifyClientScrollOffsetAnimated(const gfx::ScrollOffset& scroll_offset, 157 void NotifyClientScrollOffsetAnimated(const gfx::ScrollOffset& scroll_offset,
179 bool notify_active_elements, 158 bool notify_active_elements,
180 bool notify_pending_elements); 159 bool notify_pending_elements);
181 gfx::ScrollOffset ScrollOffsetForAnimation() const; 160 gfx::ScrollOffset ScrollOffsetForAnimation() const;
182 161
183 private: 162 private:
184 friend class base::RefCounted<ElementAnimations>; 163 friend class base::RefCounted<ElementAnimations>;
185 164
186 ElementAnimations(); 165 ElementAnimations();
187 ~ElementAnimations(); 166 ~ElementAnimations();
188 167
189 enum class ActivationType { NORMAL, FORCE };
190 void UpdateActivation(ActivationType type);
191
192 void OnFilterAnimated(ElementListType list_type, 168 void OnFilterAnimated(ElementListType list_type,
193 const FilterOperations& filters); 169 const FilterOperations& filters);
194 void OnOpacityAnimated(ElementListType list_type, float opacity); 170 void OnOpacityAnimated(ElementListType list_type, float opacity);
195 void OnTransformAnimated(ElementListType list_type, 171 void OnTransformAnimated(ElementListType list_type,
196 const gfx::Transform& transform); 172 const gfx::Transform& transform);
197 void OnScrollOffsetAnimated(ElementListType list_type, 173 void OnScrollOffsetAnimated(ElementListType list_type,
198 const gfx::ScrollOffset& scroll_offset); 174 const gfx::ScrollOffset& scroll_offset);
199 175
200 static TargetProperties GetPropertiesMaskForAnimationState(); 176 static TargetProperties GetPropertiesMaskForAnimationState();
201 177
178 void UpdateActivation(ActivationType activation_type) const;
179 void Deactivate() const;
180
202 PlayersList players_list_; 181 PlayersList players_list_;
203 AnimationHost* animation_host_; 182 AnimationHost* animation_host_;
204 ElementId element_id_; 183 ElementId element_id_;
205 184
206 // This is used to ensure that we don't spam the animation host.
207 bool is_active_;
208
209 base::TimeTicks last_tick_time_;
210
211 bool has_element_in_active_list_; 185 bool has_element_in_active_list_;
212 bool has_element_in_pending_list_; 186 bool has_element_in_pending_list_;
213 187
214 mutable bool scroll_offset_animation_was_interrupted_;
215
216 mutable bool needs_push_properties_; 188 mutable bool needs_push_properties_;
217 189
218 PropertyAnimationState active_state_; 190 PropertyAnimationState active_state_;
219 PropertyAnimationState pending_state_; 191 PropertyAnimationState pending_state_;
220 192
221 mutable bool needs_update_impl_client_state_; 193 mutable bool needs_update_impl_client_state_;
222 194
223 DISALLOW_COPY_AND_ASSIGN(ElementAnimations); 195 DISALLOW_COPY_AND_ASSIGN(ElementAnimations);
224 }; 196 };
225 197
226 } // namespace cc 198 } // namespace cc
227 199
228 #endif // CC_ANIMATION_ELEMENT_ANIMATIONS_H_ 200 #endif // CC_ANIMATION_ELEMENT_ANIMATIONS_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698