Chromium Code Reviews| Index: Source/core/animation/AnimationStack.cpp |
| diff --git a/Source/core/animation/AnimationStack.cpp b/Source/core/animation/AnimationStack.cpp |
| index 178d1d9013beb52df4df83a6bc2de26632b46eca..bb92b571638bcdb1e15ef3804976546df05c01f1 100644 |
| --- a/Source/core/animation/AnimationStack.cpp |
| +++ b/Source/core/animation/AnimationStack.cpp |
| @@ -42,10 +42,22 @@ namespace blink { |
| namespace { |
| -void copyToActiveInterpolationMap(const WillBeHeapVector<RefPtrWillBeMember<blink::Interpolation> >& source, WillBeHeapHashMap<CSSPropertyID, RefPtrWillBeMember<blink::Interpolation> >& target) |
| +void copyToActiveInterpolationMap(const WillBeHeapVector<RefPtrWillBeMember<blink::Interpolation>>& source, InterpolationPipelineMap& target) |
| { |
| for (const auto& interpolation : source) { |
| - target.set(toStyleInterpolation(interpolation.get())->id(), interpolation.get()); |
| + CSSPropertyID property = toStyleInterpolation(interpolation.get())->id(); |
| + |
| + if (!target.contains(property)) |
| + target.set(property, InterpolationPipeline()); |
| + |
| + InterpolationPipelineMap::iterator it = target.find(property); |
| + InterpolationPipeline& pipeline = it->value; |
| + |
| + // Flush pipeline for a replace -> replace interpolation |
| + if (!pipeline.isEmpty() && interpolation->isReplaceOnly()) |
|
alancutter (OOO until 2018)
2015/02/17 03:50:56
This should be checking for cachedUnderlyingFracti
|
| + pipeline.clear(); |
| + |
| + pipeline.append(interpolation); |
| } |
| } |
| @@ -55,7 +67,7 @@ bool compareEffects(const OwnPtrWillBeMember<SampledEffect>& effect1, const OwnP |
| return effect1->sequenceNumber() < effect2->sequenceNumber(); |
| } |
| -void copyNewAnimationsToActiveInterpolationMap(const WillBeHeapVector<RawPtrWillBeMember<InertAnimation> >& newAnimations, WillBeHeapHashMap<CSSPropertyID, RefPtrWillBeMember<Interpolation> >& result) |
| +void copyNewAnimationsToActiveInterpolationMap(const WillBeHeapVector<RawPtrWillBeMember<InertAnimation>>& newAnimations, InterpolationPipelineMap& result) |
| { |
| for (const auto& newAnimation : newAnimations) { |
| OwnPtrWillBeRawPtr<WillBeHeapVector<RefPtrWillBeMember<Interpolation>>> sample = nullptr; |
| @@ -89,14 +101,14 @@ bool AnimationStack::hasActiveAnimationsOnCompositor(CSSPropertyID property) con |
| return false; |
| } |
| -WillBeHeapHashMap<CSSPropertyID, RefPtrWillBeMember<Interpolation> > AnimationStack::activeInterpolations(AnimationStack* animationStack, const WillBeHeapVector<RawPtrWillBeMember<InertAnimation> >* newAnimations, const WillBeHeapHashSet<RawPtrWillBeMember<const AnimationPlayer> >* suppressedAnimationPlayers, Animation::Priority priority, double timelineCurrentTime) |
| +InterpolationPipelineMap AnimationStack::activeInterpolations(AnimationStack* animationStack, const WillBeHeapVector<RawPtrWillBeMember<InertAnimation>>* newAnimations, const WillBeHeapHashSet<RawPtrWillBeMember<const AnimationPlayer>>* suppressedAnimationPlayers, Animation::Priority priority, double timelineCurrentTime) |
| { |
| // We don't exactly know when new animations will start, but timelineCurrentTime is a good estimate. |
| - WillBeHeapHashMap<CSSPropertyID, RefPtrWillBeMember<Interpolation> > result; |
| + InterpolationPipelineMap result; |
| if (animationStack) { |
| - WillBeHeapVector<OwnPtrWillBeMember<SampledEffect> >& effects = animationStack->m_effects; |
| + WillBeHeapVector<OwnPtrWillBeMember<SampledEffect>>& effects = animationStack->m_effects; |
| // std::sort doesn't work with OwnPtrs |
| nonCopyingSort(effects.begin(), effects.end(), compareEffects); |
| animationStack->simplifyEffects(); |