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