Commit 01a449a5 authored by abarth@chromium.org's avatar abarth@chromium.org

Hoist compositorDrivenAcceleratedScrollingEnabled check out of scrollParent

This CL moves the compositorDrivenAcceleratedScrollingEnabled check out of
scrollParent so that it's clearer in the callers that this code only does
something when this setting is enabled.

In compositorDrivenAcceleratedScrollingEnabled, this lets us call
compositorDrivenAcceleratedScrollingEnabled once instead of twice, which is
faster. In a future CL, I'll cache compositorDrivenAcceleratedScrollingEnabled
as a compositing trigger, which will make this code actually go fast.

This CL also reorders a bunch of methods in CompositingReasonFinder.cpp to make
it clearer which of these functions are called during style recalc and which
are call unconditionally on all RenderLayers.

Review URL: https://codereview.chromium.org/205343009

git-svn-id: svn://svn.chromium.org/blink/trunk@169992 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 3e794629
...@@ -1724,8 +1724,7 @@ void RenderLayer::convertToLayerCoords(const RenderLayer* ancestorLayer, LayoutR ...@@ -1724,8 +1724,7 @@ void RenderLayer::convertToLayerCoords(const RenderLayer* ancestorLayer, LayoutR
RenderLayer* RenderLayer::scrollParent() const RenderLayer* RenderLayer::scrollParent() const
{ {
if (!renderer()->compositorDrivenAcceleratedScrollingEnabled()) ASSERT(renderer()->compositorDrivenAcceleratedScrollingEnabled());
return 0;
// Normal flow elements will be parented under the main scrolling layer, so // Normal flow elements will be parented under the main scrolling layer, so
// we don't need a scroll parent/child relationship to get them to scroll. // we don't need a scroll parent/child relationship to get them to scroll.
......
...@@ -479,7 +479,7 @@ bool CompositedLayerMapping::updateGraphicsLayerConfiguration() ...@@ -479,7 +479,7 @@ bool CompositedLayerMapping::updateGraphicsLayerConfiguration()
if (m_owningLayer.needsCompositedScrolling()) if (m_owningLayer.needsCompositedScrolling())
needsDescendentsClippingLayer = false; needsDescendentsClippingLayer = false;
RenderLayer* scrollParent = m_owningLayer.scrollParent(); RenderLayer* scrollParent = renderer->compositorDrivenAcceleratedScrollingEnabled() ? m_owningLayer.scrollParent() : 0;
bool needsAncestorClip = compositor->clippedByAncestor(&m_owningLayer); bool needsAncestorClip = compositor->clippedByAncestor(&m_owningLayer);
if (scrollParent) { if (scrollParent) {
// If our containing block is our ancestor scrolling layer, then we'll already be clipped // If our containing block is our ancestor scrolling layer, then we'll already be clipped
...@@ -901,7 +901,7 @@ GraphicsLayerUpdater::UpdateType CompositedLayerMapping::updateGraphicsLayerGeom ...@@ -901,7 +901,7 @@ GraphicsLayerUpdater::UpdateType CompositedLayerMapping::updateGraphicsLayerGeom
updateRenderingContext(); updateRenderingContext();
updateShouldFlattenTransform(); updateShouldFlattenTransform();
updateChildrenTransform(); updateChildrenTransform();
updateScrollParent(m_owningLayer.scrollParent()); updateScrollParent(renderer()->compositorDrivenAcceleratedScrollingEnabled() ? m_owningLayer.scrollParent() : 0);
registerScrollingLayers(); registerScrollingLayers();
updateCompositingReasons(); updateCompositingReasons();
...@@ -1428,7 +1428,7 @@ static void updateScrollParentForGraphicsLayer(GraphicsLayer* layer, GraphicsLay ...@@ -1428,7 +1428,7 @@ static void updateScrollParentForGraphicsLayer(GraphicsLayer* layer, GraphicsLay
void CompositedLayerMapping::updateScrollParent(RenderLayer* scrollParent) void CompositedLayerMapping::updateScrollParent(RenderLayer* scrollParent)
{ {
if (!scrollParent && m_squashedLayers.size()) if (!scrollParent && m_squashedLayers.size() && renderer()->compositorDrivenAcceleratedScrollingEnabled())
scrollParent = m_squashedLayers[0].renderLayer->scrollParent(); scrollParent = m_squashedLayers[0].renderLayer->scrollParent();
if (ScrollingCoordinator* scrollingCoordinator = scrollingCoordinatorFromLayer(m_owningLayer)) { if (ScrollingCoordinator* scrollingCoordinator = scrollingCoordinatorFromLayer(m_owningLayer)) {
......
...@@ -59,52 +59,6 @@ bool CompositingReasonFinder::isMainFrame() const ...@@ -59,52 +59,6 @@ bool CompositingReasonFinder::isMainFrame() const
return !m_renderView.document().ownerElement(); 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 CompositingReasonFinder::directReasons(const RenderLayer* layer, bool* needToRecomputeCompositingRequirements) const
{ {
CompositingReasons styleReasons = layer->styleDeterminedCompositingReasons(); CompositingReasons styleReasons = layer->styleDeterminedCompositingReasons();
...@@ -112,6 +66,7 @@ CompositingReasons CompositingReasonFinder::directReasons(const RenderLayer* lay ...@@ -112,6 +66,7 @@ CompositingReasons CompositingReasonFinder::directReasons(const RenderLayer* lay
return styleReasons | nonStyleDeterminedDirectReasons(layer, needToRecomputeCompositingRequirements); return styleReasons | nonStyleDeterminedDirectReasons(layer, needToRecomputeCompositingRequirements);
} }
// This information doesn't appear to be incorporated into CompositingReasons.
bool CompositingReasonFinder::requiresCompositingForScrollableFrame() const bool CompositingReasonFinder::requiresCompositingForScrollableFrame() const
{ {
// Need this done first to determine overflow. // Need this done first to determine overflow.
...@@ -126,15 +81,34 @@ bool CompositingReasonFinder::requiresCompositingForScrollableFrame() const ...@@ -126,15 +81,34 @@ bool CompositingReasonFinder::requiresCompositingForScrollableFrame() const
return frameView->isScrollable(); 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 bool CompositingReasonFinder::requiresCompositingForTransform(RenderObject* renderer) const
{ {
if (!(m_compositingTriggers & ThreeDTransformTrigger)) if (!(m_compositingTriggers & ThreeDTransformTrigger))
return false; return false;
RenderStyle* style = renderer->style();
// Note that we ask the renderer if it has a transform, because the style may have transforms, // 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. // 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 bool CompositingReasonFinder::requiresCompositingForBackfaceVisibilityHidden(RenderObject* renderer) const
...@@ -145,41 +119,74 @@ bool CompositingReasonFinder::requiresCompositingForBackfaceVisibilityHidden(Ren ...@@ -145,41 +119,74 @@ bool CompositingReasonFinder::requiresCompositingForBackfaceVisibilityHidden(Ren
return renderer->style()->backfaceVisibility() == BackfaceVisibilityHidden; 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 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 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 layer->isUnclippedDescendant();
return true; }
if (!(m_compositingTriggers & GPURasterizationTrigger)) bool CompositingReasonFinder::requiresCompositingForOverflowScrollingParent(const RenderLayer* layer) const
return false; {
return layer->scrollParent();
}
return renderer->style()->hasWillChangeGpuRasterizationHint(); bool CompositingReasonFinder::requiresCompositingForOverflowScrolling(const RenderLayer* layer) const
{
return layer->needsCompositedScrolling();
} }
bool CompositingReasonFinder::isViewportConstrainedFixedOrStickyLayer(const RenderLayer* layer) bool CompositingReasonFinder::isViewportConstrainedFixedOrStickyLayer(const RenderLayer* layer)
...@@ -302,9 +309,4 @@ bool CompositingReasonFinder::requiresCompositingForPosition(RenderObject* rende ...@@ -302,9 +309,4 @@ bool CompositingReasonFinder::requiresCompositingForPosition(RenderObject* rende
return true; return true;
} }
bool CompositingReasonFinder::requiresCompositingForOverflowScrolling(const RenderLayer* layer) const
{
return layer->needsCompositedScrolling();
}
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment