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

Reply via email to