OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
261 | 261 |
262 void CSSAnimations::calculateCompositorAnimationUpdate( | 262 void CSSAnimations::calculateCompositorAnimationUpdate( |
263 CSSAnimationUpdate& update, | 263 CSSAnimationUpdate& update, |
264 const Element* animatingElement, | 264 const Element* animatingElement, |
265 Element& element, | 265 Element& element, |
266 const ComputedStyle& style, | 266 const ComputedStyle& style, |
267 const ComputedStyle* parentStyle) { | 267 const ComputedStyle* parentStyle) { |
268 ElementAnimations* elementAnimations = | 268 ElementAnimations* elementAnimations = |
269 animatingElement ? animatingElement->elementAnimations() : nullptr; | 269 animatingElement ? animatingElement->elementAnimations() : nullptr; |
270 | 270 |
271 // We only update compositor animations in response to changes in the base sty
le. | 271 // We only update compositor animations in response to changes in the base |
| 272 // style. |
272 if (!elementAnimations || elementAnimations->isAnimationStyleChange()) | 273 if (!elementAnimations || elementAnimations->isAnimationStyleChange()) |
273 return; | 274 return; |
274 | 275 |
275 if (!animatingElement->layoutObject() || | 276 if (!animatingElement->layoutObject() || |
276 !animatingElement->layoutObject()->style()) | 277 !animatingElement->layoutObject()->style()) |
277 return; | 278 return; |
278 | 279 |
279 const ComputedStyle& oldStyle = *animatingElement->layoutObject()->style(); | 280 const ComputedStyle& oldStyle = *animatingElement->layoutObject()->style(); |
280 if (!oldStyle.shouldCompositeForCurrentAnimations()) | 281 if (!oldStyle.shouldCompositeForCurrentAnimations()) |
281 return; | 282 return; |
(...skipping 30 matching lines...) Expand all Loading... |
312 const ComputedStyle& style, | 313 const ComputedStyle& style, |
313 ComputedStyle* parentStyle, | 314 ComputedStyle* parentStyle, |
314 StyleResolver* resolver) { | 315 StyleResolver* resolver) { |
315 const ElementAnimations* elementAnimations = | 316 const ElementAnimations* elementAnimations = |
316 animatingElement ? animatingElement->elementAnimations() : nullptr; | 317 animatingElement ? animatingElement->elementAnimations() : nullptr; |
317 | 318 |
318 bool isAnimationStyleChange = | 319 bool isAnimationStyleChange = |
319 elementAnimations && elementAnimations->isAnimationStyleChange(); | 320 elementAnimations && elementAnimations->isAnimationStyleChange(); |
320 | 321 |
321 #if !DCHECK_IS_ON() | 322 #if !DCHECK_IS_ON() |
322 // If we're in an animation style change, no animations can have started, been
cancelled or changed play state. | 323 // If we're in an animation style change, no animations can have started, been |
323 // When DCHECK is enabled, we verify this optimization. | 324 // cancelled or changed play state. When DCHECK is enabled, we verify this |
| 325 // optimization. |
324 if (isAnimationStyleChange) | 326 if (isAnimationStyleChange) |
325 return; | 327 return; |
326 #endif | 328 #endif |
327 | 329 |
328 const CSSAnimationData* animationData = style.animations(); | 330 const CSSAnimationData* animationData = style.animations(); |
329 const CSSAnimations* cssAnimations = | 331 const CSSAnimations* cssAnimations = |
330 elementAnimations ? &elementAnimations->cssAnimations() : nullptr; | 332 elementAnimations ? &elementAnimations->cssAnimations() : nullptr; |
331 const Element* elementForScoping = | 333 const Element* elementForScoping = |
332 animatingElement ? animatingElement : &element; | 334 animatingElement ? animatingElement : &element; |
333 | 335 |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
457 } | 459 } |
458 | 460 |
459 void CSSAnimations::maybeApplyPendingUpdate(Element* element) { | 461 void CSSAnimations::maybeApplyPendingUpdate(Element* element) { |
460 m_previousActiveInterpolationsForAnimations.clear(); | 462 m_previousActiveInterpolationsForAnimations.clear(); |
461 if (m_pendingUpdate.isEmpty()) | 463 if (m_pendingUpdate.isEmpty()) |
462 return; | 464 return; |
463 | 465 |
464 m_previousActiveInterpolationsForAnimations.swap( | 466 m_previousActiveInterpolationsForAnimations.swap( |
465 m_pendingUpdate.activeInterpolationsForAnimations()); | 467 m_pendingUpdate.activeInterpolationsForAnimations()); |
466 | 468 |
467 // FIXME: cancelling, pausing, unpausing animations all query compositingState
, which is not necessarily up to date here | 469 // FIXME: cancelling, pausing, unpausing animations all query |
| 470 // compositingState, which is not necessarily up to date here |
468 // since we call this from recalc style. | 471 // since we call this from recalc style. |
469 // https://code.google.com/p/chromium/issues/detail?id=339847 | 472 // https://code.google.com/p/chromium/issues/detail?id=339847 |
470 DisableCompositingQueryAsserts disabler; | 473 DisableCompositingQueryAsserts disabler; |
471 | 474 |
472 for (size_t pausedIndex : | 475 for (size_t pausedIndex : |
473 m_pendingUpdate.animationIndicesWithPauseToggled()) { | 476 m_pendingUpdate.animationIndicesWithPauseToggled()) { |
474 Animation& animation = *m_runningAnimations[pausedIndex]->animation; | 477 Animation& animation = *m_runningAnimations[pausedIndex]->animation; |
475 if (animation.paused()) | 478 if (animation.paused()) |
476 animation.unpause(); | 479 animation.unpause(); |
477 else | 480 else |
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
676 Timing timing = transitionData.convertToTiming(transitionIndex); | 679 Timing timing = transitionData.convertToTiming(transitionIndex); |
677 if (timing.startDelay + timing.iterationDuration <= 0) | 680 if (timing.startDelay + timing.iterationDuration <= 0) |
678 return; | 681 return; |
679 | 682 |
680 AnimatableValue* reversingAdjustedStartValue = from.get(); | 683 AnimatableValue* reversingAdjustedStartValue = from.get(); |
681 double reversingShorteningFactor = 1; | 684 double reversingShorteningFactor = 1; |
682 if (interruptedTransition) { | 685 if (interruptedTransition) { |
683 const double interruptedProgress = | 686 const double interruptedProgress = |
684 interruptedTransition->animation->effect()->progress(); | 687 interruptedTransition->animation->effect()->progress(); |
685 if (!std::isnan(interruptedProgress)) { | 688 if (!std::isnan(interruptedProgress)) { |
686 // const_cast because we need to take a ref later when passing to startTra
nsition. | 689 // const_cast because we need to take a ref later when passing to |
| 690 // startTransition. |
687 reversingAdjustedStartValue = | 691 reversingAdjustedStartValue = |
688 const_cast<AnimatableValue*>(interruptedTransition->to); | 692 const_cast<AnimatableValue*>(interruptedTransition->to); |
689 reversingShorteningFactor = | 693 reversingShorteningFactor = |
690 clampTo((interruptedProgress * | 694 clampTo((interruptedProgress * |
691 interruptedTransition->reversingShorteningFactor) + | 695 interruptedTransition->reversingShorteningFactor) + |
692 (1 - interruptedTransition->reversingShorteningFactor), | 696 (1 - interruptedTransition->reversingShorteningFactor), |
693 0.0, 1.0); | 697 0.0, 1.0); |
694 timing.iterationDuration *= reversingShorteningFactor; | 698 timing.iterationDuration *= reversingShorteningFactor; |
695 if (timing.startDelay < 0) { | 699 if (timing.startDelay < 0) { |
696 timing.startDelay *= reversingShorteningFactor; | 700 timing.startDelay *= reversingShorteningFactor; |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
746 animatingElement->document().wasPrinting()) | 750 animatingElement->document().wasPrinting()) |
747 return; | 751 return; |
748 | 752 |
749 ElementAnimations* elementAnimations = animatingElement->elementAnimations(); | 753 ElementAnimations* elementAnimations = animatingElement->elementAnimations(); |
750 const TransitionMap* activeTransitions = | 754 const TransitionMap* activeTransitions = |
751 elementAnimations ? &elementAnimations->cssAnimations().m_transitions | 755 elementAnimations ? &elementAnimations->cssAnimations().m_transitions |
752 : nullptr; | 756 : nullptr; |
753 const CSSTransitionData* transitionData = style.transitions(); | 757 const CSSTransitionData* transitionData = style.transitions(); |
754 | 758 |
755 #if DCHECK_IS_ON() | 759 #if DCHECK_IS_ON() |
756 // In debug builds we verify that it would have been safe to avoid populating
and testing listedProperties if the style recalc is due to animation. | 760 // In debug builds we verify that it would have been safe to avoid populating |
| 761 // and testing listedProperties if the style recalc is due to animation. |
757 const bool animationStyleRecalc = false; | 762 const bool animationStyleRecalc = false; |
758 #else | 763 #else |
759 // In release builds we avoid the cost of checking for new and interrupted tra
nsitions if the style recalc is due to animation. | 764 // In release builds we avoid the cost of checking for new and interrupted |
| 765 // transitions if the style recalc is due to animation. |
760 const bool animationStyleRecalc = | 766 const bool animationStyleRecalc = |
761 elementAnimations && elementAnimations->isAnimationStyleChange(); | 767 elementAnimations && elementAnimations->isAnimationStyleChange(); |
762 #endif | 768 #endif |
763 | 769 |
764 std::bitset<numCSSProperties> listedProperties; | 770 std::bitset<numCSSProperties> listedProperties; |
765 bool anyTransitionHadTransitionAll = false; | 771 bool anyTransitionHadTransitionAll = false; |
766 const LayoutObject* layoutObject = animatingElement->layoutObject(); | 772 const LayoutObject* layoutObject = animatingElement->layoutObject(); |
767 if (!animationStyleRecalc && style.display() != EDisplay::None && | 773 if (!animationStyleRecalc && style.display() != EDisplay::None && |
768 layoutObject && layoutObject->style() && transitionData) { | 774 layoutObject && layoutObject->style() && transitionData) { |
769 const ComputedStyle& oldStyle = *layoutObject->style(); | 775 const ComputedStyle& oldStyle = *layoutObject->style(); |
770 | 776 |
771 for (size_t i = 0; i < transitionData->propertyList().size(); ++i) { | 777 for (size_t i = 0; i < transitionData->propertyList().size(); ++i) { |
772 const CSSTransitionData::TransitionProperty& transitionProperty = | 778 const CSSTransitionData::TransitionProperty& transitionProperty = |
773 transitionData->propertyList()[i]; | 779 transitionData->propertyList()[i]; |
774 if (transitionProperty.propertyType != | 780 if (transitionProperty.propertyType != |
775 CSSTransitionData::TransitionKnownProperty) | 781 CSSTransitionData::TransitionKnownProperty) |
776 continue; | 782 continue; |
777 | 783 |
778 CSSPropertyID property = | 784 CSSPropertyID property = |
779 resolveCSSPropertyID(transitionProperty.unresolvedProperty); | 785 resolveCSSPropertyID(transitionProperty.unresolvedProperty); |
780 bool animateAll = property == CSSPropertyAll; | 786 bool animateAll = property == CSSPropertyAll; |
781 if (animateAll) | 787 if (animateAll) |
782 anyTransitionHadTransitionAll = true; | 788 anyTransitionHadTransitionAll = true; |
783 const StylePropertyShorthand& propertyList = | 789 const StylePropertyShorthand& propertyList = |
784 animateAll ? CSSAnimations::propertiesForTransitionAll() | 790 animateAll ? CSSAnimations::propertiesForTransitionAll() |
785 : shorthandForProperty(property); | 791 : shorthandForProperty(property); |
786 // If not a shorthand we only execute one iteration of this loop, and refe
r to the property directly. | 792 // If not a shorthand we only execute one iteration of this loop, and |
| 793 // refer to the property directly. |
787 for (unsigned j = 0; !j || j < propertyList.length(); ++j) { | 794 for (unsigned j = 0; !j || j < propertyList.length(); ++j) { |
788 CSSPropertyID id = | 795 CSSPropertyID id = |
789 propertyList.length() ? propertyList.properties()[j] : property; | 796 propertyList.length() ? propertyList.properties()[j] : property; |
790 DCHECK_GE(id, firstCSSProperty); | 797 DCHECK_GE(id, firstCSSProperty); |
791 | 798 |
792 if (!animateAll) { | 799 if (!animateAll) { |
793 if (CSSPropertyMetadata::isInterpolableProperty(id)) | 800 if (CSSPropertyMetadata::isInterpolableProperty(id)) |
794 listedProperties.set(id - firstCSSProperty); | 801 listedProperties.set(id - firstCSSProperty); |
795 else | 802 else |
796 continue; | 803 continue; |
797 } | 804 } |
798 | 805 |
799 // FIXME: We should transition if an !important property changes even wh
en an animation is running, | 806 // FIXME: We should transition if an !important property changes even |
800 // but this is a bit hard to do with the current applyMatchedProperties
system. | 807 // when an animation is running, but this is a bit hard to do with the |
| 808 // current applyMatchedProperties system. |
801 PropertyHandle property = PropertyHandle(id); | 809 PropertyHandle property = PropertyHandle(id); |
802 if (!update.activeInterpolationsForAnimations().contains(property) && | 810 if (!update.activeInterpolationsForAnimations().contains(property) && |
803 (!elementAnimations || | 811 (!elementAnimations || |
804 !elementAnimations->cssAnimations() | 812 !elementAnimations->cssAnimations() |
805 .m_previousActiveInterpolationsForAnimations.contains( | 813 .m_previousActiveInterpolationsForAnimations.contains( |
806 property))) { | 814 property))) { |
807 calculateTransitionUpdateForProperty(id, *transitionData, i, oldStyle, | 815 calculateTransitionUpdateForProperty(id, *transitionData, i, oldStyle, |
808 style, activeTransitions, update, | 816 style, activeTransitions, update, |
809 animatingElement); | 817 animatingElement); |
810 } | 818 } |
811 } | 819 } |
812 } | 820 } |
813 } | 821 } |
814 | 822 |
815 if (activeTransitions) { | 823 if (activeTransitions) { |
816 for (const auto& entry : *activeTransitions) { | 824 for (const auto& entry : *activeTransitions) { |
817 CSSPropertyID id = entry.key; | 825 CSSPropertyID id = entry.key; |
818 if (!anyTransitionHadTransitionAll && !animationStyleRecalc && | 826 if (!anyTransitionHadTransitionAll && !animationStyleRecalc && |
819 !listedProperties.test(id - firstCSSProperty)) { | 827 !listedProperties.test(id - firstCSSProperty)) { |
820 // TODO: Figure out why this fails on Chrome OS login page. crbug.com/36
5507 | 828 // TODO(crbug.com/365507): Figure out why this fails on Chrome OS login |
821 // DCHECK(animation.playStateInternal() == Animation::Finished || !(elem
entAnimations && elementAnimations->isAnimationStyleChange())); | 829 // page. |
| 830 // DCHECK(animation.playStateInternal() == Animation::Finished || |
| 831 // !(elementAnimations && |
| 832 // elementAnimations->isAnimationStyleChange())); |
822 update.cancelTransition(id); | 833 update.cancelTransition(id); |
823 } else if (entry.value.animation->finishedInternal()) { | 834 } else if (entry.value.animation->finishedInternal()) { |
824 update.finishTransition(id); | 835 update.finishTransition(id); |
825 } | 836 } |
826 } | 837 } |
827 } | 838 } |
828 } | 839 } |
829 | 840 |
830 void CSSAnimations::cancel() { | 841 void CSSAnimations::cancel() { |
831 for (const auto& runningAnimation : m_runningAnimations) { | 842 for (const auto& runningAnimation : m_runningAnimations) { |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
863 KeyframeEffect::DefaultPriority, | 874 KeyframeEffect::DefaultPriority, |
864 isStylePropertyHandle)); | 875 isStylePropertyHandle)); |
865 update.adoptActiveInterpolationsForAnimations( | 876 update.adoptActiveInterpolationsForAnimations( |
866 activeInterpolationsForAnimations); | 877 activeInterpolationsForAnimations); |
867 return; | 878 return; |
868 } | 879 } |
869 | 880 |
870 HeapVector<Member<const InertEffect>> newEffects; | 881 HeapVector<Member<const InertEffect>> newEffects; |
871 for (const auto& newAnimation : update.newAnimations()) | 882 for (const auto& newAnimation : update.newAnimations()) |
872 newEffects.append(newAnimation.effect); | 883 newEffects.append(newAnimation.effect); |
| 884 |
| 885 // Animations with updates use a temporary InertEffect for the current frame. |
873 for (const auto& updatedAnimation : update.animationsWithUpdates()) | 886 for (const auto& updatedAnimation : update.animationsWithUpdates()) |
874 newEffects.append( | 887 newEffects.append(updatedAnimation.effect); |
875 updatedAnimation | |
876 .effect); // Animations with updates use a temporary InertEffect fo
r the current frame. | |
877 | 888 |
878 ActiveInterpolationsMap activeInterpolationsForAnimations( | 889 ActiveInterpolationsMap activeInterpolationsForAnimations( |
879 AnimationStack::activeInterpolations( | 890 AnimationStack::activeInterpolations( |
880 animationStack, &newEffects, &update.suppressedAnimations(), | 891 animationStack, &newEffects, &update.suppressedAnimations(), |
881 KeyframeEffect::DefaultPriority, isStylePropertyHandle)); | 892 KeyframeEffect::DefaultPriority, isStylePropertyHandle)); |
882 update.adoptActiveInterpolationsForAnimations( | 893 update.adoptActiveInterpolationsForAnimations( |
883 activeInterpolationsForAnimations); | 894 activeInterpolationsForAnimations); |
884 } | 895 } |
885 | 896 |
886 void CSSAnimations::calculateTransitionActiveInterpolations( | 897 void CSSAnimations::calculateTransitionActiveInterpolations( |
(...skipping 24 matching lines...) Expand all Loading... |
911 DCHECK(transitionMap.contains(id)); | 922 DCHECK(transitionMap.contains(id)); |
912 cancelledAnimations.add(transitionMap.get(id).animation.get()); | 923 cancelledAnimations.add(transitionMap.get(id).animation.get()); |
913 } | 924 } |
914 } | 925 } |
915 | 926 |
916 activeInterpolationsForTransitions = AnimationStack::activeInterpolations( | 927 activeInterpolationsForTransitions = AnimationStack::activeInterpolations( |
917 animationStack, &newTransitions, &cancelledAnimations, | 928 animationStack, &newTransitions, &cancelledAnimations, |
918 KeyframeEffect::TransitionPriority, isStylePropertyHandle); | 929 KeyframeEffect::TransitionPriority, isStylePropertyHandle); |
919 } | 930 } |
920 | 931 |
921 // Properties being animated by animations don't get values from transitions a
pplied. | 932 // Properties being animated by animations don't get values from transitions |
| 933 // applied. |
922 if (!update.activeInterpolationsForAnimations().isEmpty() && | 934 if (!update.activeInterpolationsForAnimations().isEmpty() && |
923 !activeInterpolationsForTransitions.isEmpty()) { | 935 !activeInterpolationsForTransitions.isEmpty()) { |
924 for (const auto& entry : update.activeInterpolationsForAnimations()) | 936 for (const auto& entry : update.activeInterpolationsForAnimations()) |
925 activeInterpolationsForTransitions.remove(entry.key); | 937 activeInterpolationsForTransitions.remove(entry.key); |
926 } | 938 } |
927 update.adoptActiveInterpolationsForTransitions( | 939 update.adoptActiveInterpolationsForTransitions( |
928 activeInterpolationsForTransitions); | 940 activeInterpolationsForTransitions); |
929 } | 941 } |
930 | 942 |
931 EventTarget* CSSAnimations::AnimationEventDelegate::eventTarget() const { | 943 EventTarget* CSSAnimations::AnimationEventDelegate::eventTarget() const { |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1023 visitor->trace(m_transitionTarget); | 1035 visitor->trace(m_transitionTarget); |
1024 AnimationEffectReadOnly::EventDelegate::trace(visitor); | 1036 AnimationEffectReadOnly::EventDelegate::trace(visitor); |
1025 } | 1037 } |
1026 | 1038 |
1027 const StylePropertyShorthand& CSSAnimations::propertiesForTransitionAll() { | 1039 const StylePropertyShorthand& CSSAnimations::propertiesForTransitionAll() { |
1028 DEFINE_STATIC_LOCAL(Vector<CSSPropertyID>, properties, ()); | 1040 DEFINE_STATIC_LOCAL(Vector<CSSPropertyID>, properties, ()); |
1029 DEFINE_STATIC_LOCAL(StylePropertyShorthand, propertyShorthand, ()); | 1041 DEFINE_STATIC_LOCAL(StylePropertyShorthand, propertyShorthand, ()); |
1030 if (properties.isEmpty()) { | 1042 if (properties.isEmpty()) { |
1031 for (int i = firstCSSProperty; i < lastCSSProperty; ++i) { | 1043 for (int i = firstCSSProperty; i < lastCSSProperty; ++i) { |
1032 CSSPropertyID id = convertToCSSPropertyID(i); | 1044 CSSPropertyID id = convertToCSSPropertyID(i); |
1033 // Avoid creating overlapping transitions with perspective-origin and tran
sition-origin. | 1045 // Avoid creating overlapping transitions with perspective-origin and |
| 1046 // transition-origin. |
1034 if (id == CSSPropertyWebkitPerspectiveOriginX || | 1047 if (id == CSSPropertyWebkitPerspectiveOriginX || |
1035 id == CSSPropertyWebkitPerspectiveOriginY || | 1048 id == CSSPropertyWebkitPerspectiveOriginY || |
1036 id == CSSPropertyWebkitTransformOriginX || | 1049 id == CSSPropertyWebkitTransformOriginX || |
1037 id == CSSPropertyWebkitTransformOriginY || | 1050 id == CSSPropertyWebkitTransformOriginY || |
1038 id == CSSPropertyWebkitTransformOriginZ) | 1051 id == CSSPropertyWebkitTransformOriginZ) |
1039 continue; | 1052 continue; |
1040 if (CSSPropertyMetadata::isInterpolableProperty(id)) | 1053 if (CSSPropertyMetadata::isInterpolableProperty(id)) |
1041 properties.append(id); | 1054 properties.append(id); |
1042 } | 1055 } |
1043 propertyShorthand = StylePropertyShorthand( | 1056 propertyShorthand = StylePropertyShorthand( |
1044 CSSPropertyInvalid, properties.begin(), properties.size()); | 1057 CSSPropertyInvalid, properties.begin(), properties.size()); |
1045 } | 1058 } |
1046 return propertyShorthand; | 1059 return propertyShorthand; |
1047 } | 1060 } |
1048 | 1061 |
1049 // Properties that affect animations are not allowed to be affected by animation
s. | 1062 // Properties that affect animations are not allowed to be affected by |
1050 // http://w3c.github.io/web-animations/#not-animatable-section | 1063 // animations. http://w3c.github.io/web-animations/#not-animatable-section |
1051 bool CSSAnimations::isAnimatableProperty(CSSPropertyID property) { | 1064 bool CSSAnimations::isAnimatableProperty(CSSPropertyID property) { |
1052 switch (property) { | 1065 switch (property) { |
1053 case CSSPropertyAnimation: | 1066 case CSSPropertyAnimation: |
1054 case CSSPropertyAnimationDelay: | 1067 case CSSPropertyAnimationDelay: |
1055 case CSSPropertyAnimationDirection: | 1068 case CSSPropertyAnimationDirection: |
1056 case CSSPropertyAnimationDuration: | 1069 case CSSPropertyAnimationDuration: |
1057 case CSSPropertyAnimationFillMode: | 1070 case CSSPropertyAnimationFillMode: |
1058 case CSSPropertyAnimationIterationCount: | 1071 case CSSPropertyAnimationIterationCount: |
1059 case CSSPropertyAnimationName: | 1072 case CSSPropertyAnimationName: |
1060 case CSSPropertyAnimationPlayState: | 1073 case CSSPropertyAnimationPlayState: |
(...skipping 23 matching lines...) Expand all Loading... |
1084 return toShadowRoot(treeScope.rootNode()).host() == element; | 1097 return toShadowRoot(treeScope.rootNode()).host() == element; |
1085 } | 1098 } |
1086 | 1099 |
1087 DEFINE_TRACE(CSSAnimations) { | 1100 DEFINE_TRACE(CSSAnimations) { |
1088 visitor->trace(m_transitions); | 1101 visitor->trace(m_transitions); |
1089 visitor->trace(m_pendingUpdate); | 1102 visitor->trace(m_pendingUpdate); |
1090 visitor->trace(m_runningAnimations); | 1103 visitor->trace(m_runningAnimations); |
1091 } | 1104 } |
1092 | 1105 |
1093 } // namespace blink | 1106 } // namespace blink |
OLD | NEW |