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 PaintLayer* layer) const { CompositingReasons directReasons = CompositingReasonNone; LayoutObject* layoutObject = layer->layoutObject(); if (m_compositingTriggers & OverflowScrollTrigger && 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 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; } // TODO(flackr): Rename functions and variables to include sticky position // (i.e. ScrollDependentPosition rather than PositionFixed). if (requiresCompositingForScrollDependentPosition(layer)) directReasons |= CompositingReasonScrollDependentPosition; directReasons |= layoutObject->additionalCompositingReasons(); DCHECK(!(directReasons & CompositingReasonComboAllStyleDeterminedReasons)); return directReasons; }