CompositingReasons CompositingReasonFinder::nonStyleDeterminedDirectReasons(const PaintLayer* layer) const { CompositingReasons directReasons = CompositingReasonNone; LayoutObject* layoutObject = layer->layoutObject(); if (hasOverflowScrollTrigger()) { if (layer->clipParent()) directReasons |= CompositingReasonOutOfFlowClipping; if (layer->needsCompositedScrolling()) directReasons |= CompositingReasonOverflowScrollingTouch; } // Composite |layer| if it is inside of an ancestor scrolling layer, but that // scrolling layer is not not on the stacking context ancestor chain of |layer|. // See the definition of the scrollParent property in Layer for more detail. if (const PaintLayer* scrollingAncestor = layer->ancestorScrollingLayer()) { if (scrollingAncestor->needsCompositedScrolling() && layer->scrollParent()) directReasons |= CompositingReasonOverflowScrollingParent; } if (requiresCompositingForPositionFixed(layer)) directReasons |= CompositingReasonPositionFixed; directReasons |= layoutObject->additionalCompositingReasons(); ASSERT(!(directReasons & CompositingReasonComboAllStyleDeterminedReasons)); return directReasons; }
CompositingReasons CompositingReasonFinder::nonStyleDeterminedDirectReasons(const RenderLayer* layer, bool* needToRecomputeCompositingRequirements) const { CompositingReasons directReasons = CompositingReasonNone; RenderObject* renderer = layer->renderer(); if (hasOverflowScrollTrigger()) { if (requiresCompositingForOutOfFlowClipping(layer)) directReasons |= CompositingReasonOutOfFlowClipping; if (requiresCompositingForOverflowScrollingParent(layer)) directReasons |= CompositingReasonOverflowScrollingParent; } if (requiresCompositingForOverflowScrolling(layer)) directReasons |= CompositingReasonOverflowScrollingTouch; if (requiresCompositingForPositionSticky(renderer, layer)) directReasons |= CompositingReasonPositionSticky; if (requiresCompositingForPositionFixed(renderer, layer, 0, needToRecomputeCompositingRequirements)) directReasons |= CompositingReasonPositionFixed; directReasons |= renderer->additionalCompositingReasons(m_compositingTriggers); ASSERT(!(directReasons & CompositingReasonComboAllStyleDeterminedReasons)); return directReasons; }
bool CompositingReasonFinder::requiresCompositingForPosition(RenderObject* renderer, const RenderLayer* layer, RenderLayer::ViewportConstrainedNotCompositedReason* viewportConstrainedNotCompositedReason, bool* needToRecomputeCompositingRequirements) const { return requiresCompositingForPositionSticky(renderer, layer) || requiresCompositingForPositionFixed(renderer, layer, viewportConstrainedNotCompositedReason, needToRecomputeCompositingRequirements); }