Index: third_party/WebKit/Source/core/animation/EffectModel.h |
diff --git a/third_party/WebKit/Source/core/animation/EffectModel.h b/third_party/WebKit/Source/core/animation/EffectModel.h |
index cdf0cb6d54c5cb0fcac41e396aee596159902a61..86c58b93bf77fce98f4758c720045ea9c1b6831e 100644 |
--- a/third_party/WebKit/Source/core/animation/EffectModel.h |
+++ b/third_party/WebKit/Source/core/animation/EffectModel.h |
@@ -34,6 +34,7 @@ |
#include "bindings/core/v8/ScriptWrappable.h" |
#include "core/CSSPropertyNames.h" |
#include "core/CoreExport.h" |
+#include "core/animation/AnimationEffect.h" |
#include "core/animation/PropertyHandle.h" |
#include "platform/heap/Handle.h" |
#include "wtf/HashMap.h" |
@@ -52,15 +53,49 @@ public: |
CompositeAdd, |
}; |
- EffectModel() { } |
virtual ~EffectModel() { } |
- virtual bool sample(int iteration, double fraction, double iterationDuration, Vector<RefPtr<Interpolation>>&) const = 0; |
- virtual bool affects(PropertyHandle) const { return false; } |
- virtual bool isTransformRelatedEffect() const { return false; } |
+ bool sample(int iteration, double fraction, double iterationDuration, Vector<RefPtr<Interpolation>>& result) const |
+ { |
+ DCHECK_GE(iteration, 0); |
+ DCHECK(!isNull(fraction)); |
+ bool changed = iteration != m_lastIteration || fraction != m_lastFraction || iterationDuration != m_lastIterationDuration; |
+ m_lastIteration = iteration; |
+ m_lastFraction = fraction; |
+ m_lastIterationDuration = iterationDuration; |
+ sampleImpl(iteration, fraction, iterationDuration, result); |
+ return changed; |
+ } |
+ |
+ virtual bool affects(PropertyHandle) const = 0; |
+ bool isTransformRelatedEffect() const |
+ { |
+ return affects(PropertyHandle(CSSPropertyTransform)) |
+ || affects(PropertyHandle(CSSPropertyRotate)) |
+ || affects(PropertyHandle(CSSPropertyScale)) |
+ || affects(PropertyHandle(CSSPropertyTranslate)); |
+ } |
+ |
virtual bool isKeyframeEffectModel() const { return false; } |
+ virtual bool isTransitionEffectModel() const { return false; } |
DEFINE_INLINE_VIRTUAL_TRACE() { } |
+ |
+protected: |
+ EffectModel() |
+ : m_lastIteration(0) |
+ , m_lastFraction(nullValue()) |
+ , m_lastIterationDuration(0) |
+ { } |
+ |
+ virtual void sampleImpl(int iteration, double fraction, double iterationDuration, Vector<RefPtr<Interpolation>>&) const = 0; |
+ |
+ void clearLastFraction() const { m_lastFraction = nullValue(); } |
+ |
+private: |
+ mutable int m_lastIteration; |
+ mutable double m_lastFraction; |
+ mutable double m_lastIterationDuration; |
}; |
} // namespace blink |