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

Unified Diff: Source/core/animation/AnimationStack.cpp

Issue 1329843002: Support per property CSS Animation stacks (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Fix TODO Created 5 years, 3 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
Index: Source/core/animation/AnimationStack.cpp
diff --git a/Source/core/animation/AnimationStack.cpp b/Source/core/animation/AnimationStack.cpp
index d6b55eccc798768cb4eb0664a90a322f9c3fbca4..b4b8705976f810ab9ad16b3c1f3921ac4f69944d 100644
--- a/Source/core/animation/AnimationStack.cpp
+++ b/Source/core/animation/AnimationStack.cpp
@@ -32,8 +32,9 @@
#include "core/animation/AnimationStack.h"
#include "core/animation/CompositorAnimations.h"
-#include "core/animation/StyleInterpolation.h"
+#include "core/animation/InvalidatableStyleInterpolation.h"
#include "core/animation/css/CSSAnimations.h"
+#include "platform/RuntimeEnabledFeatures.h"
#include "wtf/BitArray.h"
#include "wtf/NonCopyingSort.h"
#include <algorithm>
@@ -42,10 +43,20 @@ namespace blink {
namespace {
-void copyToActiveInterpolationMap(const Vector<RefPtr<Interpolation>>& source, ActiveInterpolationMap& target)
+void copyToActiveInterpolationMap(const Vector<RefPtr<Interpolation>>& source, ActiveInterpolationsMap& target)
dstockwell 2015/09/07 03:11:36 copyToActiveInterpolation*s*Map?
alancutter (OOO until 2018) 2015/09/07 03:36:46 Done.
{
for (const auto& interpolation : source) {
- target.set(interpolation->property(), interpolation.get());
+ ActiveInterpolationsMap::iterator entry = target.find(interpolation->property());
+ if (entry == target.end()) {
+ // Python version of this line: target[interpolation.property] = [interpolation]
+ target.set(interpolation->property(), ActiveInterpolations(1)).storedValue->value.at(0) = interpolation.get();
dstockwell 2015/09/07 03:11:36 is there a way to avoid the second hash here?
alancutter (OOO until 2018) 2015/09/07 03:36:46 Done.
+ } else if (RuntimeEnabledFeatures::stackedCSSPropertyAnimationsEnabled()
+ && interpolation->isInvalidatableStyleInterpolation()
+ && toInvalidatableStyleInterpolation(*interpolation).dependsOnUnderlyingValue()) {
dstockwell 2015/09/07 03:11:36 Why is dependonunderlying part of invalidatablesty
alancutter (OOO until 2018) 2015/09/07 03:36:46 Correct, InvalidatableStyleInterpolation will even
+ entry->value.append(interpolation.get());
+ } else {
+ entry->value.at(0) = interpolation.get();
+ }
}
}
@@ -55,7 +66,7 @@ bool compareEffects(const Member<SampledEffect>& effect1, const Member<SampledEf
return effect1->sequenceNumber() < effect2->sequenceNumber();
}
-void copyNewAnimationsToActiveInterpolationMap(const HeapVector<Member<InertEffect>>& newAnimations, ActiveInterpolationMap& result)
+void copyNewAnimationsToActiveInterpolationMap(const HeapVector<Member<InertEffect>>& newAnimations, ActiveInterpolationsMap& result)
{
for (const auto& newAnimation : newAnimations) {
OwnPtr<Vector<RefPtr<Interpolation>>> sample;
@@ -81,11 +92,11 @@ bool AnimationStack::hasActiveAnimationsOnCompositor(CSSPropertyID property) con
return false;
}
-ActiveInterpolationMap AnimationStack::activeInterpolations(AnimationStack* animationStack, const HeapVector<Member<InertEffect>>* newAnimations, const HeapHashSet<Member<const Animation>>* suppressedAnimations, KeyframeEffect::Priority priority, double timelineCurrentTime)
+ActiveInterpolationsMap AnimationStack::activeInterpolations(AnimationStack* animationStack, const HeapVector<Member<InertEffect>>* newAnimations, const HeapHashSet<Member<const Animation>>* suppressedAnimations, KeyframeEffect::Priority priority, double timelineCurrentTime)
{
// We don't exactly know when new animations will start, but timelineCurrentTime is a good estimate.
- ActiveInterpolationMap result;
+ ActiveInterpolationsMap result;
if (animationStack) {
HeapVector<Member<SampledEffect>>& effects = animationStack->m_effects;

Powered by Google App Engine
This is Rietveld 408576698