Index: Source/core/rendering/compositing/CompositingReasonFinder.cpp |
diff --git a/Source/core/rendering/compositing/CompositingReasonFinder.cpp b/Source/core/rendering/compositing/CompositingReasonFinder.cpp |
index cf8b0f69651c903864cb9ebd1f8e10a2ef66d88b..f633c115d935f30c4acd32dd474bc659f189c5cd 100644 |
--- a/Source/core/rendering/compositing/CompositingReasonFinder.cpp |
+++ b/Source/core/rendering/compositing/CompositingReasonFinder.cpp |
@@ -89,6 +89,19 @@ bool CompositingReasonFinder::isMainFrame() const |
return !m_renderView.document().ownerElement(); |
} |
+CompositingReasons CompositingReasonFinder::suppressWillChangeAndAnimationForGpuRasterization(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(); |
@@ -127,8 +140,11 @@ CompositingReasons CompositingReasonFinder::styleDeterminedReasons(RenderObject* |
if (requiresCompositingForFilters(renderer)) |
directReasons |= CompositingReasonFilters; |
- if (requiresCompositingForWillChange(renderer)) |
- directReasons |= CompositingReasonWillChange; |
+ if (requiresCompositingForWillChangeCompositingHint(renderer)) |
+ directReasons |= CompositingReasonWillChangeCompositingHint; |
+ |
+ if (requiresCompositingForWillChangeGpuRasterizationHint(renderer)) |
+ directReasons |= CompositingReasonWillChangeGpuRasterizationHint; |
ASSERT(!(directReasons & ~CompositingReasonComboAllStyleDeterminedReasons)); |
return directReasons; |
@@ -160,11 +176,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; |