Index: Source/core/animation/css/CSSAnimationUpdate.h |
diff --git a/Source/core/animation/css/CSSAnimationUpdate.h b/Source/core/animation/css/CSSAnimationUpdate.h |
index 9ae2286f746dbd4b4e787f1ce25a9d8346e814a7..e58f89c1b4fe9e094d8a5fca6fae29e766e32319 100644 |
--- a/Source/core/animation/css/CSSAnimationUpdate.h |
+++ b/Source/core/animation/css/CSSAnimationUpdate.h |
@@ -6,6 +6,7 @@ |
#define CSSAnimationUpdate_h |
#include "core/animation/Interpolation.h" |
+#include "core/css/CSSKeyframesRule.h" |
#include "wtf/HashMap.h" |
#include "wtf/Vector.h" |
#include "wtf/text/AtomicString.h" |
@@ -19,13 +20,72 @@ class InertAnimation; |
// This includes updates to animations/transitions as well as the Interpolations to be applied. |
class CSSAnimationUpdate final : public NoBaseWillBeGarbageCollectedFinalized<CSSAnimationUpdate> { |
public: |
- void startAnimation(const AtomicString& animationName, PassRefPtrWillBeRawPtr<InertAnimation> animation) |
+ class NewAnimation { |
+ ALLOW_ONLY_INLINE_ALLOCATION(); |
+ public: |
+ NewAnimation() |
+ : styleRuleVersion(0) |
+ { |
+ } |
+ |
+ NewAnimation(AtomicString name, PassRefPtrWillBeRawPtr<InertAnimation> animation, Timing timing, PassRefPtrWillBeRawPtr<StyleRuleKeyframes> styleRule) |
+ : name(name) |
+ , animation(animation) |
+ , timing(timing) |
+ , styleRule(styleRule) |
+ , styleRuleVersion(this->styleRule->version()) |
+ { |
+ } |
+ |
+ void trace(Visitor* visitor) |
+ { |
+ visitor->trace(animation); |
+ } |
+ |
+ AtomicString name; |
+ RefPtrWillBeMember<InertAnimation> animation; |
+ Timing timing; |
+ RefPtrWillBeMember<StyleRuleKeyframes> styleRule; |
+ unsigned styleRuleVersion; |
+ }; |
+ |
+ class UpdatedAnimation { |
+ ALLOW_ONLY_INLINE_ALLOCATION(); |
+ public: |
+ UpdatedAnimation() |
+ : styleRuleVersion(0) |
+ { |
+ } |
+ |
+ UpdatedAnimation(AtomicString name, AnimationPlayer* player, PassRefPtrWillBeRawPtr<InertAnimation> animation, Timing specifiedTiming, PassRefPtrWillBeRawPtr<StyleRuleKeyframes> styleRule) |
+ : name(name) |
+ , player(player) |
+ , animation(animation) |
+ , specifiedTiming(specifiedTiming) |
+ , styleRule(styleRule) |
+ , styleRuleVersion(this->styleRule->version()) |
+ { |
+ } |
+ |
+ void trace(Visitor* visitor) |
+ { |
+ visitor->trace(player); |
+ visitor->trace(animation); |
+ visitor->trace(styleRule); |
+ } |
+ |
+ AtomicString name; |
+ RawPtrWillBeMember<AnimationPlayer> player; |
+ RefPtrWillBeMember<InertAnimation> animation; |
+ Timing specifiedTiming; |
+ RefPtrWillBeMember<StyleRuleKeyframes> styleRule; |
+ unsigned styleRuleVersion; |
+ }; |
+ |
+ void startAnimation(const AtomicString& animationName, PassRefPtrWillBeRawPtr<InertAnimation> animation, const Timing& timing, PassRefPtrWillBeRawPtr<StyleRuleKeyframes> styleRule) |
{ |
animation->setName(animationName); |
- NewAnimation newAnimation; |
- newAnimation.name = animationName; |
- newAnimation.animation = animation; |
- m_newAnimations.append(newAnimation); |
+ m_newAnimations.append(NewAnimation(animationName, animation, timing, styleRule)); |
} |
// Returns whether player has been suppressed and should be filtered during style application. |
bool isSuppressedAnimation(const AnimationPlayer* player) const { return m_suppressedAnimationPlayers.contains(player); } |
@@ -38,13 +98,10 @@ public: |
{ |
m_animationsWithPauseToggled.append(name); |
} |
- void updateAnimationTiming(AnimationPlayer* player, PassRefPtrWillBeRawPtr<InertAnimation> animation, const Timing& timing) |
+ void updateAnimation(const AtomicString& name, AnimationPlayer* player, PassRefPtrWillBeRawPtr<InertAnimation> animation, const Timing& specifiedTiming, |
+ PassRefPtrWillBeRawPtr<StyleRuleKeyframes> styleRule) |
{ |
- UpdatedAnimationTiming updatedAnimation; |
- updatedAnimation.player = player; |
- updatedAnimation.animation = animation; |
- updatedAnimation.newTiming = timing; |
- m_animationsWithTimingUpdates.append(updatedAnimation); |
+ m_animationsWithUpdates.append(UpdatedAnimation(name, player, animation, specifiedTiming, styleRule)); |
m_suppressedAnimationPlayers.add(player); |
} |
@@ -62,37 +119,11 @@ public: |
bool isCancelledTransition(CSSPropertyID id) const { return m_cancelledTransitions.contains(id); } |
void cancelTransition(CSSPropertyID id) { m_cancelledTransitions.add(id); } |
- struct NewAnimation { |
- ALLOW_ONLY_INLINE_ALLOCATION(); |
- public: |
- void trace(Visitor* visitor) |
- { |
- visitor->trace(animation); |
- } |
- |
- AtomicString name; |
- RefPtrWillBeMember<InertAnimation> animation; |
- }; |
- |
- struct UpdatedAnimationTiming { |
- ALLOW_ONLY_INLINE_ALLOCATION(); |
- public: |
- void trace(Visitor* visitor) |
- { |
- visitor->trace(player); |
- visitor->trace(animation); |
- } |
- |
- RawPtrWillBeMember<AnimationPlayer> player; |
- RefPtrWillBeMember<InertAnimation> animation; |
- Timing newTiming; |
- }; |
- |
const WillBeHeapVector<NewAnimation>& newAnimations() const { return m_newAnimations; } |
const Vector<AtomicString>& cancelledAnimationNames() const { return m_cancelledAnimationNames; } |
const WillBeHeapHashSet<RawPtrWillBeMember<const AnimationPlayer>>& suppressedAnimationAnimationPlayers() const { return m_suppressedAnimationPlayers; } |
const Vector<AtomicString>& animationsWithPauseToggled() const { return m_animationsWithPauseToggled; } |
- const WillBeHeapVector<UpdatedAnimationTiming>& animationsWithTimingUpdates() const { return m_animationsWithTimingUpdates; } |
+ const WillBeHeapVector<UpdatedAnimation>& animationsWithUpdates() const { return m_animationsWithUpdates; } |
struct NewTransition { |
ALLOW_ONLY_INLINE_ALLOCATION(); |
@@ -126,7 +157,7 @@ public: |
&& m_cancelledAnimationNames.isEmpty() |
&& m_suppressedAnimationPlayers.isEmpty() |
&& m_animationsWithPauseToggled.isEmpty() |
- && m_animationsWithTimingUpdates.isEmpty() |
+ && m_animationsWithUpdates.isEmpty() |
&& m_newTransitions.isEmpty() |
&& m_cancelledTransitions.isEmpty() |
&& m_activeInterpolationsForAnimations.isEmpty() |
@@ -144,7 +175,7 @@ private: |
Vector<AtomicString> m_cancelledAnimationNames; |
WillBeHeapHashSet<RawPtrWillBeMember<const AnimationPlayer>> m_suppressedAnimationPlayers; |
Vector<AtomicString> m_animationsWithPauseToggled; |
- WillBeHeapVector<UpdatedAnimationTiming> m_animationsWithTimingUpdates; |
+ WillBeHeapVector<UpdatedAnimation> m_animationsWithUpdates; |
NewTransitionMap m_newTransitions; |
HashSet<CSSPropertyID> m_cancelledTransitions; |
@@ -156,6 +187,6 @@ private: |
} // namespace blink |
WTF_ALLOW_INIT_WITH_MEM_FUNCTIONS(blink::CSSAnimationUpdate::NewAnimation); |
-WTF_ALLOW_INIT_WITH_MEM_FUNCTIONS(blink::CSSAnimationUpdate::UpdatedAnimationTiming); |
+WTF_ALLOW_INIT_WITH_MEM_FUNCTIONS(blink::CSSAnimationUpdate::UpdatedAnimation); |
#endif |