Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 7f4d81cc368a03b8e402309bdd04fa0f5dcf6904
      
https://github.com/WebKit/WebKit/commit/7f4d81cc368a03b8e402309bdd04fa0f5dcf6904
  Author: Simon Fraser <[email protected]>
  Date:   2023-06-28 (Wed, 28 Jun 2023)

  Changed paths:
    M Source/WebCore/rendering/RenderHTMLCanvas.cpp
    M Source/WebCore/rendering/RenderLayerBacking.cpp
    M Source/WebCore/rendering/RenderLayerBacking.h
    M Source/WebCore/rendering/RenderLayerCompositor.cpp

  Log Message:
  -----------
  Avoid evaluating layer backing store contents twice per update
https://bugs.webkit.org/show_bug.cgi?id=258579
rdar://111397321

Reviewed by Alan Baradlay.

Profiling youtube pages shows that we spend a lot of time in the 
PaintedContentsInfo code, which
does a partial tree walk to determine if a compositing layer can be rendered as 
a simple color, or
has no contents. This is called from `updateDirectlyCompositedBoxDecorations()` 
which is called by
both RenderLayerBacking::updateConfiguration() and 
RenderLayerBacking::updateAfterDescendants(); the
latter call can give different results, since the result depends on the 
configuration of descendant
layers.

Fix this by moving all the code that leverages PaintedContentsInfo into 
updateAfterDescendants(), so
the contents evaluation is done only once; also guard it on a
m_owningLayer.needsCompositingConfigurationUpdate() check.

It's safe to move the code that calls setAppliesDeviceScale() and 
setShouldPaintUsingCompositeCopy()
here; those calls don't change the GraphicsLayer hierarchy (the intent of 
"layerConfigChanged"),
they only set state on a GraphicsLayer.

Also remove some #if ENABLE(CSS_COMPOSITING) checks; these were intended to 
surround code related to
CSS Compositing and Blending, not internal compositing changes.

Tested by existing tests, particularly 
compositing/backing/solid-color-with-paints-into-ancestor.html.

* Source/WebCore/rendering/RenderHTMLCanvas.cpp:
(WebCore::RenderHTMLCanvas::paintReplaced):
* Source/WebCore/rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::updateConfiguration):
(WebCore::RenderLayerBacking::updateAfterDescendants):
* Source/WebCore/rendering/RenderLayerBacking.h:
* Source/WebCore/rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::updateBackingAndHierarchy):

Canonical link: https://commits.webkit.org/265587@main


_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to