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(); |
-} |
- |
} |