| Index: third_party/WebKit/Source/core/animation/KeyframeInterpolation.cpp
 | 
| diff --git a/third_party/WebKit/Source/core/animation/InvalidatableInterpolation.cpp b/third_party/WebKit/Source/core/animation/KeyframeInterpolation.cpp
 | 
| similarity index 72%
 | 
| rename from third_party/WebKit/Source/core/animation/InvalidatableInterpolation.cpp
 | 
| rename to third_party/WebKit/Source/core/animation/KeyframeInterpolation.cpp
 | 
| index 7f1b47cf075b3b69e3ec055e37f57e78165e52df..7c4265c539933a99d47a16c800074d260404ed22 100644
 | 
| --- a/third_party/WebKit/Source/core/animation/InvalidatableInterpolation.cpp
 | 
| +++ b/third_party/WebKit/Source/core/animation/KeyframeInterpolation.cpp
 | 
| @@ -2,7 +2,7 @@
 | 
|  // Use of this source code is governed by a BSD-style license that can be
 | 
|  // found in the LICENSE file.
 | 
|  
 | 
| -#include "core/animation/InvalidatableInterpolation.h"
 | 
| +#include "core/animation/KeyframeInterpolation.h"
 | 
|  
 | 
|  #include "core/animation/InterpolationEnvironment.h"
 | 
|  #include "core/animation/StringKeyframe.h"
 | 
| @@ -11,40 +11,35 @@
 | 
|  
 | 
|  namespace blink {
 | 
|  
 | 
| -void InvalidatableInterpolation::interpolate(int, double fraction)
 | 
| +void KeyframeInterpolation::interpolateImpl()
 | 
|  {
 | 
| -    if (fraction == m_currentFraction)
 | 
| -        return;
 | 
| +    DCHECK(m_previousFraction != m_currentFraction);
 | 
|  
 | 
| -    if (m_currentFraction == 0 || m_currentFraction == 1 || fraction == 0 || fraction == 1)
 | 
| +    if (m_previousFraction == 0 || m_previousFraction == 1 || m_currentFraction == 0 || m_currentFraction == 1)
 | 
|          clearCache();
 | 
|  
 | 
| -    m_currentFraction = fraction;
 | 
| +    m_previousFraction = m_currentFraction;
 | 
|      if (m_isCached && m_cachedPairConversion)
 | 
| -        m_cachedPairConversion->interpolateValue(fraction, m_cachedValue);
 | 
| +        m_cachedPairConversion->interpolateValue(m_currentFraction, m_cachedValue);
 | 
|      // We defer the interpolation to ensureValidInterpolation() if m_cachedPairConversion is null.
 | 
|  }
 | 
|  
 | 
| -std::unique_ptr<PairwisePrimitiveInterpolation> InvalidatableInterpolation::maybeConvertPairwise(const InterpolationEnvironment& environment, const UnderlyingValueOwner& underlyingValueOwner) const
 | 
| +std::unique_ptr<PairwisePrimitiveInterpolation> KeyframeInterpolation::maybeConvertPairwise(const InterpolationEnvironment& environment, const UnderlyingValueOwner& underlyingValueOwner) const
 | 
|  {
 | 
| -    ASSERT(m_currentFraction != 0 && m_currentFraction != 1);
 | 
| +    DCHECK(m_currentFraction != 0 && m_currentFraction != 1);
 | 
|      for (const auto& interpolationType : m_interpolationTypes) {
 | 
|          if ((m_startKeyframe->isNeutral() || m_endKeyframe->isNeutral()) && (!underlyingValueOwner || underlyingValueOwner.type() != *interpolationType))
 | 
|              continue;
 | 
|          ConversionCheckers conversionCheckers;
 | 
|          PairwiseInterpolationValue result = interpolationType->maybeConvertPairwise(*m_startKeyframe, *m_endKeyframe, environment, underlyingValueOwner.value(), conversionCheckers);
 | 
|          addConversionCheckers(*interpolationType, conversionCheckers);
 | 
| -        if (result) {
 | 
| -            return PairwisePrimitiveInterpolation::create(*interpolationType,
 | 
| -                std::move(result.startInterpolableValue),
 | 
| -                std::move(result.endInterpolableValue),
 | 
| -                result.nonInterpolableValue.release());
 | 
| -        }
 | 
| +        if (result)
 | 
| +            return PairwisePrimitiveInterpolation::create(*interpolationType, std::move(result));
 | 
|      }
 | 
|      return nullptr;
 | 
|  }
 | 
|  
 | 
| -std::unique_ptr<TypedInterpolationValue> InvalidatableInterpolation::convertSingleKeyframe(const PropertySpecificKeyframe& keyframe, const InterpolationEnvironment& environment, const UnderlyingValueOwner& underlyingValueOwner) const
 | 
| +std::unique_ptr<TypedInterpolationValue> KeyframeInterpolation::convertSingleKeyframe(const PropertySpecificKeyframe& keyframe, const InterpolationEnvironment& environment, const UnderlyingValueOwner& underlyingValueOwner) const
 | 
|  {
 | 
|      if (keyframe.isNeutral() && !underlyingValueOwner)
 | 
|          return nullptr;
 | 
| @@ -55,13 +50,13 @@ std::unique_ptr<TypedInterpolationValue> InvalidatableInterpolation::convertSing
 | 
|          InterpolationValue result = interpolationType->maybeConvertSingle(keyframe, environment, underlyingValueOwner.value(), conversionCheckers);
 | 
|          addConversionCheckers(*interpolationType, conversionCheckers);
 | 
|          if (result)
 | 
| -            return TypedInterpolationValue::create(*interpolationType, std::move(result.interpolableValue), result.nonInterpolableValue.release());
 | 
| +            return TypedInterpolationValue::create(*interpolationType, std::move(result));
 | 
|      }
 | 
| -    ASSERT(keyframe.isNeutral());
 | 
| +    DCHECK(keyframe.isNeutral());
 | 
|      return nullptr;
 | 
|  }
 | 
|  
 | 
| -void InvalidatableInterpolation::addConversionCheckers(const InterpolationType& type, ConversionCheckers& conversionCheckers) const
 | 
| +void KeyframeInterpolation::addConversionCheckers(const InterpolationType& type, ConversionCheckers& conversionCheckers) const
 | 
|  {
 | 
|      for (size_t i = 0; i < conversionCheckers.size(); i++) {
 | 
|          conversionCheckers[i]->setType(type);
 | 
| @@ -69,27 +64,27 @@ void InvalidatableInterpolation::addConversionCheckers(const InterpolationType&
 | 
|      }
 | 
|  }
 | 
|  
 | 
| -std::unique_ptr<TypedInterpolationValue> InvalidatableInterpolation::maybeConvertUnderlyingValue(const InterpolationEnvironment& environment) const
 | 
| +std::unique_ptr<TypedInterpolationValue> KeyframeInterpolation::maybeConvertUnderlyingValue(const InterpolationEnvironment& environment) const
 | 
|  {
 | 
|      for (const auto& interpolationType : m_interpolationTypes) {
 | 
|          InterpolationValue result = interpolationType->maybeConvertUnderlyingValue(environment);
 | 
|          if (result)
 | 
| -            return TypedInterpolationValue::create(*interpolationType, std::move(result.interpolableValue), result.nonInterpolableValue.release());
 | 
| +            return TypedInterpolationValue::create(*interpolationType, std::move(result));
 | 
|      }
 | 
|      return nullptr;
 | 
|  }
 | 
|  
 | 
| -bool InvalidatableInterpolation::dependsOnUnderlyingValue() const
 | 
| +bool KeyframeInterpolation::dependsOnUnderlyingValue() const
 | 
|  {
 | 
|      return (m_startKeyframe->underlyingFraction() != 0 && m_currentFraction != 1) || (m_endKeyframe->underlyingFraction() != 0 && m_currentFraction != 0);
 | 
|  }
 | 
|  
 | 
| -bool InvalidatableInterpolation::isNeutralKeyframeActive() const
 | 
| +bool KeyframeInterpolation::isNeutralKeyframeActive() const
 | 
|  {
 | 
|      return (m_startKeyframe->isNeutral() && m_currentFraction != 1) || (m_endKeyframe->isNeutral() && m_currentFraction != 0);
 | 
|  }
 | 
|  
 | 
| -void InvalidatableInterpolation::clearCache() const
 | 
| +void KeyframeInterpolation::clearCache() const
 | 
|  {
 | 
|      m_isCached = false;
 | 
|      m_cachedPairConversion.reset();
 | 
| @@ -97,7 +92,7 @@ void InvalidatableInterpolation::clearCache() const
 | 
|      m_cachedValue.reset();
 | 
|  }
 | 
|  
 | 
| -bool InvalidatableInterpolation::isCacheValid(const InterpolationEnvironment& environment, const UnderlyingValueOwner& underlyingValueOwner) const
 | 
| +bool KeyframeInterpolation::isCacheValid(const InterpolationEnvironment& environment, const UnderlyingValueOwner& underlyingValueOwner) const
 | 
|  {
 | 
|      if (!m_isCached)
 | 
|          return false;
 | 
| @@ -115,9 +110,9 @@ bool InvalidatableInterpolation::isCacheValid(const InterpolationEnvironment& en
 | 
|      return true;
 | 
|  }
 | 
|  
 | 
| -const TypedInterpolationValue* InvalidatableInterpolation::ensureValidInterpolation(const InterpolationEnvironment& environment, const UnderlyingValueOwner& underlyingValueOwner) const
 | 
| +const TypedInterpolationValue* KeyframeInterpolation::ensureValidInterpolation(const InterpolationEnvironment& environment, const UnderlyingValueOwner& underlyingValueOwner) const
 | 
|  {
 | 
| -    ASSERT(!std::isnan(m_currentFraction));
 | 
| +    DCHECK(!std::isnan(m_currentFraction));
 | 
|      if (isCacheValid(environment, underlyingValueOwner))
 | 
|          return m_cachedValue.get();
 | 
|      clearCache();
 | 
| @@ -141,7 +136,7 @@ const TypedInterpolationValue* InvalidatableInterpolation::ensureValidInterpolat
 | 
|      return m_cachedValue.get();
 | 
|  }
 | 
|  
 | 
| -void InvalidatableInterpolation::setFlagIfInheritUsed(InterpolationEnvironment& environment) const
 | 
| +void KeyframeInterpolation::setFlagIfInheritUsed(InterpolationEnvironment& environment) const
 | 
|  {
 | 
|      if (!m_property.isCSSProperty() && !m_property.isPresentationAttribute())
 | 
|          return;
 | 
| @@ -155,7 +150,7 @@ void InvalidatableInterpolation::setFlagIfInheritUsed(InterpolationEnvironment&
 | 
|      }
 | 
|  }
 | 
|  
 | 
| -double InvalidatableInterpolation::underlyingFraction() const
 | 
| +double KeyframeInterpolation::underlyingFraction() const
 | 
|  {
 | 
|      if (m_currentFraction == 0)
 | 
|          return m_startKeyframe->underlyingFraction();
 | 
| @@ -164,14 +159,14 @@ double InvalidatableInterpolation::underlyingFraction() const
 | 
|      return m_cachedPairConversion->interpolateUnderlyingFraction(m_startKeyframe->underlyingFraction(), m_endKeyframe->underlyingFraction(), m_currentFraction);
 | 
|  }
 | 
|  
 | 
| -void InvalidatableInterpolation::applyStack(const ActiveInterpolations& interpolations, InterpolationEnvironment& environment)
 | 
| +void KeyframeInterpolation::applyStack(const ActiveInterpolations& interpolations, InterpolationEnvironment& environment)
 | 
|  {
 | 
| -    ASSERT(!interpolations.isEmpty());
 | 
| +    DCHECK(!interpolations.isEmpty());
 | 
|      size_t startingIndex = 0;
 | 
|  
 | 
|      // Compute the underlying value to composite onto.
 | 
|      UnderlyingValueOwner underlyingValueOwner;
 | 
| -    const InvalidatableInterpolation& firstInterpolation = toInvalidatableInterpolation(*interpolations.at(startingIndex));
 | 
| +    const KeyframeInterpolation& firstInterpolation = toKeyframeInterpolation(*interpolations.at(startingIndex));
 | 
|      if (firstInterpolation.dependsOnUnderlyingValue()) {
 | 
|          underlyingValueOwner.set(firstInterpolation.maybeConvertUnderlyingValue(environment));
 | 
|      } else {
 | 
| @@ -191,8 +186,8 @@ void InvalidatableInterpolation::applyStack(const ActiveInterpolations& interpol
 | 
|      // Composite interpolations onto the underlying value.
 | 
|      bool shouldApply = false;
 | 
|      for (size_t i = startingIndex; i < interpolations.size(); i++) {
 | 
| -        const InvalidatableInterpolation& currentInterpolation = toInvalidatableInterpolation(*interpolations.at(i));
 | 
| -        ASSERT(currentInterpolation.dependsOnUnderlyingValue());
 | 
| +        const KeyframeInterpolation& currentInterpolation = toKeyframeInterpolation(*interpolations.at(i));
 | 
| +        DCHECK(currentInterpolation.dependsOnUnderlyingValue());
 | 
|          const TypedInterpolationValue* currentValue = currentInterpolation.ensureValidInterpolation(environment, underlyingValueOwner);
 | 
|          if (!currentValue)
 | 
|              continue;
 | 
| 
 |