Chromium Code Reviews| 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..994676ef7a6fd823742a550c297442e89750dc65 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 |
|
abarth-chromium
2014/04/14 20:25:53
Can we give this function a more semantic name? S
ajuma
2014/04/15 19:11:34
Done.
|
| +{ |
| + 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; |
| +} |
| + |
| + |
|
abarth-chromium
2014/04/14 20:25:53
Please remove this extra blank line.
ajuma
2014/04/15 19:11:34
Done.
|
| 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); |
|
abarth-chromium
2014/04/14 20:29:53
Maybe it would be clearer to just inline this func
|
| 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; |