/* static */ bool ActiveLayerTracker::IsStyleAnimated(nsDisplayListBuilder* aBuilder, nsIFrame* aFrame, nsCSSProperty aProperty) { // TODO: Add some abuse restrictions if ((aFrame->StyleDisplay()->mWillChangeBitField & NS_STYLE_WILL_CHANGE_TRANSFORM) && aProperty == eCSSProperty_transform && (!aBuilder || aBuilder->IsInWillChangeBudget(aFrame, aFrame->GetSize()))) { return true; } if ((aFrame->StyleDisplay()->mWillChangeBitField & NS_STYLE_WILL_CHANGE_OPACITY) && aProperty == eCSSProperty_opacity && (!aBuilder || aBuilder->IsInWillChangeBudget(aFrame, aFrame->GetSize()))) { return true; } LayerActivity* layerActivity = GetLayerActivity(aFrame); if (layerActivity) { if (layerActivity->RestyleCountForProperty(aProperty) >= 2) { return true; } } if (aProperty == eCSSProperty_transform && aFrame->Combines3DTransformWithAncestors()) { return IsStyleAnimated(aBuilder, aFrame->GetParent(), aProperty); } return nsLayoutUtils::HasCurrentAnimationsForProperties(aFrame, &aProperty, 1); }
/* static */ bool ActiveLayerTracker::IsStyleAnimated(nsIFrame* aFrame, nsCSSProperty aProperty) { LayerActivity* layerActivity = GetLayerActivity(aFrame); if (layerActivity) { if (layerActivity->RestyleCountForProperty(aProperty) >= 2) { return true; } } if (aProperty == eCSSProperty_transform && aFrame->Preserves3D()) { return IsStyleAnimated(aFrame->GetParent(), aProperty); } nsIContent* content = aFrame->GetContent(); if (content) { if (mozilla::HasAnimationOrTransition<ElementAnimations>( content, nsGkAtoms::animationsProperty, aProperty)) { return true; } if (mozilla::HasAnimationOrTransition<ElementTransitions>( content, nsGkAtoms::transitionsProperty, aProperty)) { return true; } } return false; }
/* static */ bool ActiveLayerTracker::IsStyleAnimated(nsIFrame* aFrame, nsCSSProperty aProperty) { LayerActivity* layerActivity = GetLayerActivity(aFrame); if (layerActivity) { if (layerActivity->RestyleCountForProperty(aProperty) >= 2) { return true; } } if (aProperty == eCSSProperty_transform && aFrame->Preserves3D()) { return IsStyleAnimated(aFrame->GetParent(), aProperty); } return false; }
/* static */ bool ActiveLayerTracker::IsStyleAnimated(nsIFrame* aFrame, nsCSSProperty aProperty) { // TODO: Add some abuse restrictions if ((aFrame->StyleDisplay()->mWillChangeBitField & NS_STYLE_WILL_CHANGE_TRANSFORM) && aProperty == eCSSProperty_transform) { return true; } if ((aFrame->StyleDisplay()->mWillChangeBitField & NS_STYLE_WILL_CHANGE_OPACITY) && aProperty == eCSSProperty_opacity) { return true; } LayerActivity* layerActivity = GetLayerActivity(aFrame); if (layerActivity) { if (layerActivity->RestyleCountForProperty(aProperty) >= 2) { return true; } } if (aProperty == eCSSProperty_transform && aFrame->Preserves3D()) { return IsStyleAnimated(aFrame->GetParent(), aProperty); } nsIContent* content = aFrame->GetContent(); if (content) { if (mozilla::HasAnimationOrTransition<ElementAnimations>( content, nsGkAtoms::animationsProperty, aProperty)) { return true; } if (mozilla::HasAnimationOrTransition<ElementTransitions>( content, nsGkAtoms::transitionsProperty, aProperty)) { return true; } } return false; }
/* static */ bool ActiveLayerTracker::IsStyleMaybeAnimated(nsIFrame* aFrame, nsCSSProperty aProperty) { return IsStyleAnimated(nullptr, aFrame, aProperty); }