Index: Source/core/animation/css/CSSAnimations.cpp |
diff --git a/Source/core/animation/css/CSSAnimations.cpp b/Source/core/animation/css/CSSAnimations.cpp |
index b111a3943d66ec8f3c859aef36d24510c0b936da..0ea4893f497de34ee9b2b2e7f6972a8a87acd1fe 100644 |
--- a/Source/core/animation/css/CSSAnimations.cpp |
+++ b/Source/core/animation/css/CSSAnimations.cpp |
@@ -72,6 +72,17 @@ bool isLaterPhase(TimedItem::Phase target, TimedItem::Phase reference) |
return target > reference; |
} |
+CSSPropertyID propertyForAnimation(CSSPropertyID property) |
+{ |
+ switch (property) { |
+ case CSSPropertyWebkitPerspective: |
+ return CSSPropertyPerspective; |
+ default: |
+ break; |
+ } |
+ return property; |
+} |
+ |
static void resolveKeyframes(StyleResolver* resolver, Element* element, const Element& parentElement, const RenderStyle& style, RenderStyle* parentStyle, const AtomicString& name, TimingFunction* defaultTimingFunction, |
KeyframeEffectModel::KeyframeVector& keyframes) |
{ |
@@ -86,7 +97,7 @@ static void resolveKeyframes(StyleResolver* resolver, Element* element, const El |
return; |
// Construct and populate the style for each keyframe |
- PropertySet specifiedProperties; |
+ PropertySet specifiedPropertiesForUseCounter; |
for (size_t i = 0; i < styleKeyframes.size(); ++i) { |
const StyleKeyframe* styleKeyframe = styleKeyframes[i].get(); |
// It's OK to pass a null element here. |
@@ -98,12 +109,13 @@ static void resolveKeyframes(StyleResolver* resolver, Element* element, const El |
keyframe->setEasing(defaultTimingFunction); |
const StylePropertySet& properties = styleKeyframe->properties(); |
for (unsigned j = 0; j < properties.propertyCount(); j++) { |
- CSSPropertyID property = properties.propertyAt(j).id(); |
- specifiedProperties.add(property); |
- if (property == CSSPropertyWebkitAnimationTimingFunction || property == CSSPropertyAnimationTimingFunction) |
+ specifiedPropertiesForUseCounter.add(properties.propertyAt(j).id()); |
+ CSSPropertyID property = propertyForAnimation(properties.propertyAt(j).id()); |
+ if (property == CSSPropertyWebkitAnimationTimingFunction || property == CSSPropertyAnimationTimingFunction) { |
keyframe->setEasing(KeyframeValue::timingFunction(*keyframeStyle)); |
- else if (CSSAnimations::isAnimatableProperty(property)) |
+ } else if (CSSAnimations::isAnimatableProperty(property)) { |
keyframe->setPropertyValue(property, CSSAnimatableValueFactory::create(property, *keyframeStyle).get()); |
+ } |
} |
keyframes.append(keyframe); |
// The last keyframe specified at a given offset is used. |
@@ -113,7 +125,7 @@ static void resolveKeyframes(StyleResolver* resolver, Element* element, const El |
} |
ASSERT(!keyframes.isEmpty()); |
- for (PropertySet::const_iterator iter = specifiedProperties.begin(); iter != specifiedProperties.end(); ++iter) { |
+ for (PropertySet::const_iterator iter = specifiedPropertiesForUseCounter.begin(); iter != specifiedPropertiesForUseCounter.end(); ++iter) { |
const CSSPropertyID property = *iter; |
ASSERT(property != CSSPropertyInvalid); |
blink::Platform::current()->histogramSparse("WebCore.Animation.CSSProperties", UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(property)); |
@@ -397,7 +409,7 @@ void CSSAnimations::maybeApplyPendingUpdate(Element* element) |
CSSPropertyID id = newTransition.id; |
InertAnimation* inertAnimation = newTransition.animation.get(); |
- OwnPtr<TransitionEventDelegate> eventDelegate = adoptPtr(new TransitionEventDelegate(element, id)); |
+ OwnPtr<TransitionEventDelegate> eventDelegate = adoptPtr(new TransitionEventDelegate(element, newTransition.eventId)); |
RefPtrWillBeRawPtr<AnimationEffect> effect = inertAnimation->effect(); |
@@ -480,7 +492,8 @@ void CSSAnimations::calculateTransitionUpdateForProperty(CSSPropertyID id, const |
RefPtrWillBeRawPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes); |
- update->startTransition(id, from.get(), to.get(), InertAnimation::create(effect, timing, isPaused)); |
+ CSSPropertyID eventId = anim->animationMode() == CSSAnimationData::AnimateAll ? id : anim->property(); |
+ update->startTransition(id, eventId, from.get(), to.get(), InertAnimation::create(effect, timing, isPaused)); |
ASSERT(!element->activeAnimations() || !element->activeAnimations()->isAnimationStyleChange()); |
} |
@@ -522,6 +535,7 @@ void CSSAnimations::calculateTransitionUpdate(CSSAnimationUpdate* update, const |
CSSPropertyID id = propertyList.length() ? propertyList.properties()[j] : anim->property(); |
if (!animateAll) { |
+ id = propertyForAnimation(id); |
if (CSSAnimations::isAnimatableProperty(id)) |
listedProperties.set(id); |
else |
@@ -766,7 +780,7 @@ bool CSSAnimations::isAnimatableProperty(CSSPropertyID property) |
case CSSPropertyWebkitMaskPositionX: |
case CSSPropertyWebkitMaskPositionY: |
case CSSPropertyWebkitMaskSize: |
- case CSSPropertyWebkitPerspective: |
+ case CSSPropertyPerspective: |
case CSSPropertyWebkitPerspectiveOriginX: |
case CSSPropertyWebkitPerspectiveOriginY: |
case CSSPropertyShapeOutside: |