| Index: cc/animation/keyframed_animation_curve.cc | 
| diff --git a/cc/animation/keyframed_animation_curve.cc b/cc/animation/keyframed_animation_curve.cc | 
| index bf65df8f20f00ca694b0f7b604ece794f76fdede..f8f6021b1881e70f26ebcdcb6bc57bd62ce31c3f 100644 | 
| --- a/cc/animation/keyframed_animation_curve.cc | 
| +++ b/cc/animation/keyframed_animation_curve.cc | 
| @@ -379,7 +379,27 @@ bool KeyframedTransformAnimationCurve::IsTranslation() const { | 
| } | 
| return true; | 
| } | 
| +bool KeyframedTransformAnimationCurve::AnimationStartScale( | 
| +    bool forward_direction, | 
| +    float* start_scale) const { | 
| +  DCHECK_GE(keyframes_.size(), 2ul); | 
| +  *start_scale = 0.f; | 
| +  size_t start_location = 0; | 
| +  if (!forward_direction) { | 
| +    start_location = keyframes_.size() - 1; | 
| +  } | 
|  | 
| +  gfx::Vector3dF initial_target_scale; | 
| +  if (!keyframes_[start_location]->Value().ScaleComponent( | 
| +          &initial_target_scale)) | 
| +    return false; | 
| +  float start_scale_for_segment = | 
| +      fmax(std::abs(initial_target_scale.x()), | 
| +           fmax(std::abs(initial_target_scale.y()), | 
| +                std::abs(initial_target_scale.z()))); | 
| +  *start_scale = start_scale_for_segment; | 
| +  return true; | 
| +} | 
| bool KeyframedTransformAnimationCurve::MaximumTargetScale( | 
| bool forward_direction, | 
| float* max_scale) const { | 
|  |