Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: f6f36fc5f3d6ed600fa6106a6b88b404c976d252
https://github.com/WebKit/WebKit/commit/f6f36fc5f3d6ed600fa6106a6b88b404c976d252
Author: Antti Koivisto <[email protected]>
Date: 2026-05-20 (Wed, 20 May 2026)
Changed paths:
M Source/WebCore/rendering/RenderElement.cpp
M Source/WebCore/rendering/RenderElement.h
M Source/WebCore/rendering/RenderLayerModelObject.cpp
Log Message:
-----------
Avoid O(n^2) traversal under RenderLayer::insertOnlyThisLayer
https://bugs.webkit.org/show_bug.cgi?id=315179
rdar://177430526
Reviewed by Simon Fraser.
RenderElement::layerNextSibling may end up doing O(n) search. In certain style
mutations this
can be triggered n times leading to O(n^2) behavior.
Fix by adding a bit that tells if a given subtree may have a layer. We use it
to skip
traversing into layer-less subtrees when searching for a layer sibling and when
adding,
removing or moving layers. For simplicity this bit is only ever set and never
cleared.
* Source/WebCore/rendering/RenderElement.cpp:
(WebCore::RenderElement::setMayHaveLayerInSubtreeIncludingAncestors):
(WebCore::findNextLayer):
(WebCore::addLayers):
(WebCore::RenderElement::removeLayers):
(WebCore::RenderElement::moveLayers):
(WebCore::RenderElement::insertedIntoTree):
* Source/WebCore/rendering/RenderElement.h:
(WebCore::RenderElement::mayHaveLayerInSubtree const):
* Source/WebCore/rendering/RenderLayerModelObject.cpp:
(WebCore::RenderLayerModelObject::createLayer):
Canonical link: https://commits.webkit.org/313589@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications