| Index: Source/core/rendering/compositing/CompositingReasonFinder.cpp
|
| diff --git a/Source/core/rendering/compositing/CompositingReasonFinder.cpp b/Source/core/rendering/compositing/CompositingReasonFinder.cpp
|
| index 6f9ae626c35aa7cd735e75bf78d1f9c5a653df8d..261c935086b1f604dd45728f3c6494711ab0d42f 100644
|
| --- a/Source/core/rendering/compositing/CompositingReasonFinder.cpp
|
| +++ b/Source/core/rendering/compositing/CompositingReasonFinder.cpp
|
| @@ -59,52 +59,6 @@ bool CompositingReasonFinder::isMainFrame() const
|
| return !m_renderView.document().ownerElement();
|
| }
|
|
|
| -CompositingReasons CompositingReasonFinder::styleDeterminedReasons(RenderObject* renderer) const
|
| -{
|
| - CompositingReasons directReasons = CompositingReasonNone;
|
| -
|
| - if (requiresCompositingForTransform(renderer))
|
| - directReasons |= CompositingReason3DTransform;
|
| -
|
| - if (requiresCompositingForBackfaceVisibilityHidden(renderer))
|
| - directReasons |= CompositingReasonBackfaceVisibilityHidden;
|
| -
|
| - if (requiresCompositingForFilters(renderer))
|
| - directReasons |= CompositingReasonFilters;
|
| -
|
| - if (requiresCompositingForWillChange(renderer))
|
| - directReasons |= CompositingReasonWillChange;
|
| -
|
| - ASSERT(!(directReasons & ~CompositingReasonComboAllStyleDeterminedReasons));
|
| - return directReasons;
|
| -}
|
| -
|
| -CompositingReasons CompositingReasonFinder::nonStyleDeterminedDirectReasons(const RenderLayer* layer, bool* needToRecomputeCompositingRequirements) const
|
| -{
|
| - CompositingReasons directReasons = CompositingReasonNone;
|
| - RenderObject* renderer = layer->renderer();
|
| -
|
| - if (requiresCompositingForAnimation(renderer))
|
| - directReasons |= CompositingReasonActiveAnimation;
|
| -
|
| - if (requiresCompositingForOutOfFlowClipping(layer))
|
| - directReasons |= CompositingReasonOutOfFlowClipping;
|
| -
|
| - if (requiresCompositingForOverflowScrolling(layer))
|
| - directReasons |= CompositingReasonOverflowScrollingTouch;
|
| -
|
| - if (requiresCompositingForOverflowScrollingParent(layer))
|
| - directReasons |= CompositingReasonOverflowScrollingParent;
|
| -
|
| - if (requiresCompositingForPosition(renderer, layer, 0, needToRecomputeCompositingRequirements))
|
| - directReasons |= renderer->style()->position() == FixedPosition ? CompositingReasonPositionFixed : CompositingReasonPositionSticky;
|
| -
|
| - directReasons |= renderer->additionalCompositingReasons(m_compositingTriggers);
|
| -
|
| - ASSERT(!(directReasons & CompositingReasonComboAllStyleDeterminedReasons));
|
| - return directReasons;
|
| -}
|
| -
|
| CompositingReasons CompositingReasonFinder::directReasons(const RenderLayer* layer, bool* needToRecomputeCompositingRequirements) const
|
| {
|
| CompositingReasons styleReasons = layer->styleDeterminedCompositingReasons();
|
| @@ -112,6 +66,7 @@ CompositingReasons CompositingReasonFinder::directReasons(const RenderLayer* lay
|
| return styleReasons | nonStyleDeterminedDirectReasons(layer, needToRecomputeCompositingRequirements);
|
| }
|
|
|
| +// This information doesn't appear to be incorporated into CompositingReasons.
|
| bool CompositingReasonFinder::requiresCompositingForScrollableFrame() const
|
| {
|
| // Need this done first to determine overflow.
|
| @@ -126,15 +81,34 @@ bool CompositingReasonFinder::requiresCompositingForScrollableFrame() const
|
| return frameView->isScrollable();
|
| }
|
|
|
| +CompositingReasons CompositingReasonFinder::styleDeterminedReasons(RenderObject* renderer) const
|
| +{
|
| + CompositingReasons directReasons = CompositingReasonNone;
|
| +
|
| + if (requiresCompositingForTransform(renderer))
|
| + directReasons |= CompositingReason3DTransform;
|
| +
|
| + if (requiresCompositingForBackfaceVisibilityHidden(renderer))
|
| + directReasons |= CompositingReasonBackfaceVisibilityHidden;
|
| +
|
| + if (requiresCompositingForFilters(renderer))
|
| + directReasons |= CompositingReasonFilters;
|
| +
|
| + if (requiresCompositingForWillChange(renderer))
|
| + directReasons |= CompositingReasonWillChange;
|
| +
|
| + ASSERT(!(directReasons & ~CompositingReasonComboAllStyleDeterminedReasons));
|
| + return directReasons;
|
| +}
|
| +
|
| bool CompositingReasonFinder::requiresCompositingForTransform(RenderObject* renderer) const
|
| {
|
| if (!(m_compositingTriggers & ThreeDTransformTrigger))
|
| return false;
|
|
|
| - RenderStyle* style = renderer->style();
|
| // Note that we ask the renderer if it has a transform, because the style may have transforms,
|
| // but the renderer may be an inline that doesn't suppport them.
|
| - return renderer->hasTransform() && style->transform().has3DOperation();
|
| + return renderer->hasTransform() && renderer->style()->transform().has3DOperation();
|
| }
|
|
|
| bool CompositingReasonFinder::requiresCompositingForBackfaceVisibilityHidden(RenderObject* renderer) const
|
| @@ -145,41 +119,74 @@ bool CompositingReasonFinder::requiresCompositingForBackfaceVisibilityHidden(Ren
|
| return renderer->style()->backfaceVisibility() == BackfaceVisibilityHidden;
|
| }
|
|
|
| -bool CompositingReasonFinder::requiresCompositingForAnimation(RenderObject* renderer) const
|
| +bool CompositingReasonFinder::requiresCompositingForFilters(RenderObject* renderer) const
|
| {
|
| - if (!(m_compositingTriggers & AnimationTrigger))
|
| + if (!(m_compositingTriggers & FilterTrigger))
|
| return false;
|
|
|
| - return shouldCompositeForActiveAnimations(*renderer);
|
| + return renderer->hasFilter();
|
| }
|
|
|
| -bool CompositingReasonFinder::requiresCompositingForFilters(RenderObject* renderer) const
|
| +bool CompositingReasonFinder::requiresCompositingForWillChange(const RenderObject* renderer) const
|
| {
|
| - if (!(m_compositingTriggers & FilterTrigger))
|
| + if (renderer->style()->hasWillChangeCompositingHint())
|
| + return true;
|
| +
|
| + if (!(m_compositingTriggers & GPURasterizationTrigger))
|
| return false;
|
|
|
| - return renderer->hasFilter();
|
| + return renderer->style()->hasWillChangeGpuRasterizationHint();
|
| }
|
|
|
| -bool CompositingReasonFinder::requiresCompositingForOverflowScrollingParent(const RenderLayer* layer) const
|
| +CompositingReasons CompositingReasonFinder::nonStyleDeterminedDirectReasons(const RenderLayer* layer, bool* needToRecomputeCompositingRequirements) const
|
| {
|
| - return !!layer->scrollParent();
|
| + CompositingReasons directReasons = CompositingReasonNone;
|
| + RenderObject* renderer = layer->renderer();
|
| +
|
| + if (requiresCompositingForAnimation(renderer))
|
| + directReasons |= CompositingReasonActiveAnimation;
|
| +
|
| + if (m_renderView.compositorDrivenAcceleratedScrollingEnabled()) {
|
| + if (requiresCompositingForOutOfFlowClipping(layer))
|
| + directReasons |= CompositingReasonOutOfFlowClipping;
|
| +
|
| + if (requiresCompositingForOverflowScrollingParent(layer))
|
| + directReasons |= CompositingReasonOverflowScrollingParent;
|
| + }
|
| +
|
| + if (requiresCompositingForOverflowScrolling(layer))
|
| + directReasons |= CompositingReasonOverflowScrollingTouch;
|
| +
|
| + if (requiresCompositingForPosition(renderer, layer, 0, needToRecomputeCompositingRequirements))
|
| + directReasons |= renderer->style()->position() == FixedPosition ? CompositingReasonPositionFixed : CompositingReasonPositionSticky;
|
| +
|
| + directReasons |= renderer->additionalCompositingReasons(m_compositingTriggers);
|
| +
|
| + ASSERT(!(directReasons & CompositingReasonComboAllStyleDeterminedReasons));
|
| + return directReasons;
|
| }
|
|
|
| -bool CompositingReasonFinder::requiresCompositingForOutOfFlowClipping(const RenderLayer* layer) const
|
| +bool CompositingReasonFinder::requiresCompositingForAnimation(RenderObject* renderer) const
|
| {
|
| - return m_renderView.compositorDrivenAcceleratedScrollingEnabled() && layer->isUnclippedDescendant();
|
| + if (!(m_compositingTriggers & AnimationTrigger))
|
| + return false;
|
| +
|
| + return shouldCompositeForActiveAnimations(*renderer);
|
| }
|
|
|
| -bool CompositingReasonFinder::requiresCompositingForWillChange(const RenderObject* renderer) const
|
| +bool CompositingReasonFinder::requiresCompositingForOutOfFlowClipping(const RenderLayer* layer) const
|
| {
|
| - if (renderer->style()->hasWillChangeCompositingHint())
|
| - return true;
|
| + return layer->isUnclippedDescendant();
|
| +}
|
|
|
| - if (!(m_compositingTriggers & GPURasterizationTrigger))
|
| - return false;
|
| +bool CompositingReasonFinder::requiresCompositingForOverflowScrollingParent(const RenderLayer* layer) const
|
| +{
|
| + return layer->scrollParent();
|
| +}
|
|
|
| - return renderer->style()->hasWillChangeGpuRasterizationHint();
|
| +bool CompositingReasonFinder::requiresCompositingForOverflowScrolling(const RenderLayer* layer) const
|
| +{
|
| + return layer->needsCompositedScrolling();
|
| }
|
|
|
| bool CompositingReasonFinder::isViewportConstrainedFixedOrStickyLayer(const RenderLayer* layer)
|
| @@ -302,9 +309,4 @@ bool CompositingReasonFinder::requiresCompositingForPosition(RenderObject* rende
|
| return true;
|
| }
|
|
|
| -bool CompositingReasonFinder::requiresCompositingForOverflowScrolling(const RenderLayer* layer) const
|
| -{
|
| - return layer->needsCompositedScrolling();
|
| -}
|
| -
|
| }
|
|
|