| 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:
|
|
|