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

Unified Diff: Source/core/animation/PrimitiveInterpolation.h

Issue 1214593003: Move AnimationValue onto the heap (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 6 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/animation/InvalidatableStyleInterpolation.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/animation/PrimitiveInterpolation.h
diff --git a/Source/core/animation/PrimitiveInterpolation.h b/Source/core/animation/PrimitiveInterpolation.h
index 3f4d86f125ae6abde9d67b9ef18b74208594688f..68272c6a7033e5e4438f844df46bdcc21f3898c5 100644
--- a/Source/core/animation/PrimitiveInterpolation.h
+++ b/Source/core/animation/PrimitiveInterpolation.h
@@ -20,7 +20,7 @@ class PrimitiveInterpolation : public NoBaseWillBeGarbageCollectedFinalized<Prim
public:
virtual ~PrimitiveInterpolation() { }
- virtual void interpolate(double fraction, AnimationValue& result) const = 0;
+ virtual void interpolate(double fraction, OwnPtrWillBeRawPtr<AnimationValue>& result) const = 0;
DEFINE_INLINE_VIRTUAL_TRACE() { }
};
@@ -30,22 +30,23 @@ class PairwisePrimitiveInterpolation : public PrimitiveInterpolation {
public:
virtual ~PairwisePrimitiveInterpolation() { }
- static PassOwnPtrWillBeRawPtr<PairwisePrimitiveInterpolation> create(PassOwnPtrWillBeRawPtr<InterpolableValue> start, PassOwnPtrWillBeRawPtr<InterpolableValue> end, PassRefPtrWillBeRawPtr<NonInterpolableValue> nonInterpolableValue)
+ static PassOwnPtrWillBeRawPtr<PairwisePrimitiveInterpolation> create(const AnimationType& type, PassOwnPtrWillBeRawPtr<InterpolableValue> start, PassOwnPtrWillBeRawPtr<InterpolableValue> end, PassRefPtrWillBeRawPtr<NonInterpolableValue> nonInterpolableValue)
{
- return adoptPtrWillBeNoop(new PairwisePrimitiveInterpolation(start, end, nonInterpolableValue));
+ return adoptPtrWillBeNoop(new PairwisePrimitiveInterpolation(type, start, end, nonInterpolableValue));
}
- void initializeAnimationValue(AnimationValue& value)
+ PassOwnPtrWillBeRawPtr<AnimationValue> initialValue() const
{
- value.interpolableValue = m_start->clone();
- value.nonInterpolableValue = m_nonInterpolableValue;
+ return AnimationValue::create(m_type, m_start->clone(), m_nonInterpolableValue);
}
private:
- virtual void interpolate(double fraction, AnimationValue& result) const override final
+ virtual void interpolate(double fraction, OwnPtrWillBeRawPtr<AnimationValue>& result) const override final
{
- ASSERT(result.nonInterpolableValue == m_nonInterpolableValue);
- m_start->interpolate(*m_end, fraction, *result.interpolableValue);
+ ASSERT(result);
+ ASSERT(&result->type() == &m_type);
+ ASSERT(result->nonInterpolableValue() == m_nonInterpolableValue.get());
+ m_start->interpolate(*m_end, fraction, result->interpolableValue());
}
DEFINE_INLINE_VIRTUAL_TRACE()
@@ -56,11 +57,14 @@ private:
visitor->trace(m_nonInterpolableValue);
}
- PairwisePrimitiveInterpolation(PassOwnPtrWillBeRawPtr<InterpolableValue> start, PassOwnPtrWillBeRawPtr<InterpolableValue> end, PassRefPtrWillBeRawPtr<NonInterpolableValue> nonInterpolableValue)
- : m_start(start)
+ PairwisePrimitiveInterpolation(const AnimationType& type, PassOwnPtrWillBeRawPtr<InterpolableValue> start, PassOwnPtrWillBeRawPtr<InterpolableValue> end, PassRefPtrWillBeRawPtr<NonInterpolableValue> nonInterpolableValue)
+ : m_type(type)
+ , m_start(start)
, m_end(end)
, m_nonInterpolableValue(nonInterpolableValue)
{ }
+
+ const AnimationType& m_type;
OwnPtrWillBeMember<InterpolableValue> m_start;
OwnPtrWillBeMember<InterpolableValue> m_end;
RefPtrWillBeMember<NonInterpolableValue> m_nonInterpolableValue;
@@ -69,39 +73,20 @@ private:
// Represents a pair of incompatible keyframes that fall back to 50% flip behaviour eg. "auto" and "0px".
class FlipPrimitiveInterpolation : public PrimitiveInterpolation {
public:
- struct Side : public NoBaseWillBeGarbageCollectedFinalized<Side> {
- const AnimationType& type;
- OwnPtrWillBeMember<InterpolableValue> interpolableValue;
- RefPtrWillBeMember<NonInterpolableValue> nonInterpolableValue;
-
- static PassOwnPtrWillBeRawPtr<Side> create(const AnimationType& type) { return adoptPtrWillBeNoop(new Side(type)); }
-
- DEFINE_INLINE_TRACE()
- {
- visitor->trace(interpolableValue);
- visitor->trace(nonInterpolableValue);
- }
-
- private:
- Side(const AnimationType& type)
- : type(type)
- { }
- };
-
virtual ~FlipPrimitiveInterpolation() { }
- static PassOwnPtrWillBeRawPtr<FlipPrimitiveInterpolation> create(PassOwnPtrWillBeRawPtr<Side> start, PassOwnPtrWillBeRawPtr<Side> end)
+ static PassOwnPtrWillBeRawPtr<FlipPrimitiveInterpolation> create(PassOwnPtrWillBeRawPtr<AnimationValue> start, PassOwnPtrWillBeRawPtr<AnimationValue> end)
{
return adoptPtrWillBeNoop(new FlipPrimitiveInterpolation(start, end));
}
private:
- virtual void interpolate(double fraction, AnimationValue& result) const override final
+ virtual void interpolate(double fraction, OwnPtrWillBeRawPtr<AnimationValue>& result) const override final
{
// TODO(alancutter): Remove this optimisation once Oilpan is default.
if (!std::isnan(m_lastFraction) && (fraction < 0.5) == (m_lastFraction < 0.5))
return;
- result.copyFrom((fraction < 0.5) ? m_start : m_end);
+ result = ((fraction < 0.5) ? m_start : m_end)->clone();
m_lastFraction = fraction;
}
@@ -112,14 +97,17 @@ private:
visitor->trace(m_end);
}
- FlipPrimitiveInterpolation(PassOwnPtrWillBeRawPtr<Side> start, PassOwnPtrWillBeRawPtr<Side> end)
- : m_start(&start->type, start->interpolableValue.release(), start->nonInterpolableValue.release())
- , m_end(&end->type, end->interpolableValue.release(), end->nonInterpolableValue.release())
+ FlipPrimitiveInterpolation(PassOwnPtrWillBeRawPtr<AnimationValue> start, PassOwnPtrWillBeRawPtr<AnimationValue> end)
+ : m_start(start)
+ , m_end(end)
, m_lastFraction(std::numeric_limits<double>::quiet_NaN())
- { }
+ {
+ ASSERT(m_start);
+ ASSERT(m_end);
+ }
- AnimationValue m_start;
- AnimationValue m_end;
+ OwnPtrWillBeRawPtr<AnimationValue> m_start;
+ OwnPtrWillBeRawPtr<AnimationValue> m_end;
mutable double m_lastFraction;
};
« no previous file with comments | « Source/core/animation/InvalidatableStyleInterpolation.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698