| Index: Source/core/rendering/compositing/CompositingReasonFinder.cpp
|
| diff --git a/Source/core/rendering/compositing/CompositingReasonFinder.cpp b/Source/core/rendering/compositing/CompositingReasonFinder.cpp
|
| index e7a901c1f216022525455093badd09039a449013..2146b468c7636428853d160c4c519a79038c26f3 100644
|
| --- a/Source/core/rendering/compositing/CompositingReasonFinder.cpp
|
| +++ b/Source/core/rendering/compositing/CompositingReasonFinder.cpp
|
| @@ -89,10 +89,24 @@ bool CompositingReasonFinder::isMainFrame() const
|
| return !m_renderView.document().ownerElement();
|
| }
|
|
|
| +CompositingReasons CompositingReasonFinder::suppressStyleDeterminedReasonsIfPossible(const RenderLayer* layer, CompositingReasons styleReasons) const
|
| +{
|
| + CompositingReasons adjustedReasons = styleReasons;
|
| + adjustedReasons &= ~(CompositingReasonWillChangeCompositingHint | CompositingReasonWillChangeGpuRasterizationHint);
|
| +
|
| + // We can suppress layer creation for animations before animations start, but not
|
| + // once they're already running on the compositor.
|
| + if (!layer->renderer()->style()->isRunningAnimationOnCompositor())
|
| + adjustedReasons &= ~CompositingReasonActiveAnimation;
|
| +
|
| + return adjustedReasons;
|
| +}
|
| +
|
| +
|
| CompositingReasons CompositingReasonFinder::directReasons(const RenderLayer* layer, bool* needToRecomputeCompositingRequirements) const
|
| {
|
| CompositingReasons styleReasons = layer->styleDeterminedCompositingReasons();
|
| - ASSERT(styleDeterminedReasons(layer->renderer()) == styleReasons);
|
| + ASSERT(styleDeterminedReasons(layer) == styleReasons);
|
| return styleReasons | nonStyleDeterminedDirectReasons(layer, needToRecomputeCompositingRequirements);
|
| }
|
|
|
| @@ -111,9 +125,10 @@ bool CompositingReasonFinder::requiresCompositingForScrollableFrame() const
|
| return frameView->isScrollable();
|
| }
|
|
|
| -CompositingReasons CompositingReasonFinder::styleDeterminedReasons(RenderObject* renderer) const
|
| +CompositingReasons CompositingReasonFinder::styleDeterminedReasons(const RenderLayer* layer) const
|
| {
|
| CompositingReasons directReasons = CompositingReasonNone;
|
| + RenderObject* renderer = layer->renderer();
|
|
|
| if (requiresCompositingForTransform(renderer))
|
| directReasons |= CompositingReason3DTransform;
|
| @@ -127,8 +142,14 @@ CompositingReasons CompositingReasonFinder::styleDeterminedReasons(RenderObject*
|
| if (requiresCompositingForFilters(renderer))
|
| directReasons |= CompositingReasonFilters;
|
|
|
| - if (requiresCompositingForWillChange(renderer))
|
| - directReasons |= CompositingReasonWillChange;
|
| + if (requiresCompositingForWillChangeCompositingHint(renderer))
|
| + directReasons |= CompositingReasonWillChangeCompositingHint;
|
| +
|
| + if (requiresCompositingForWillChangeGpuRasterizationHint(renderer))
|
| + directReasons |= CompositingReasonWillChangeGpuRasterizationHint;
|
| +
|
| + if (layer->suppressingCompositedLayerCreation())
|
| + directReasons = suppressStyleDeterminedReasonsIfPossible(layer, directReasons);
|
|
|
| ASSERT(!(directReasons & ~CompositingReasonComboAllStyleDeterminedReasons));
|
| return directReasons;
|
| @@ -160,11 +181,13 @@ bool CompositingReasonFinder::requiresCompositingForFilters(RenderObject* render
|
| return renderer->hasFilter();
|
| }
|
|
|
| -bool CompositingReasonFinder::requiresCompositingForWillChange(const RenderObject* renderer) const
|
| +bool CompositingReasonFinder::requiresCompositingForWillChangeCompositingHint(const RenderObject* renderer) const
|
| {
|
| - if (renderer->style()->hasWillChangeCompositingHint())
|
| - return true;
|
| + return renderer->style()->hasWillChangeCompositingHint();
|
| +}
|
|
|
| +bool CompositingReasonFinder::requiresCompositingForWillChangeGpuRasterizationHint(const RenderObject* renderer) const
|
| +{
|
| if (!(m_compositingTriggers & GPURasterizationTrigger))
|
| return false;
|
|
|
|
|