Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 4bc53a1f5d14f10c3c50e0bed4b38977def0698c
      
https://github.com/WebKit/WebKit/commit/4bc53a1f5d14f10c3c50e0bed4b38977def0698c
  Author: Nikolas Zimmermann <[email protected]>
  Date:   2026-02-04 (Wed, 04 Feb 2026)

  Changed paths:
    M Source/WebCore/rendering/ReferencedSVGResources.cpp
    M Source/WebCore/rendering/RenderLayerModelObject.h
    M Source/WebCore/rendering/svg/RenderSVGContainer.cpp
    M Source/WebCore/rendering/svg/RenderSVGImage.cpp
    M Source/WebCore/rendering/svg/RenderSVGModelObject.cpp
    M Source/WebCore/rendering/svg/RenderSVGModelObject.h
    M Source/WebCore/rendering/svg/RenderSVGResourceContainer.cpp
    M Source/WebCore/rendering/svg/RenderSVGResourceContainer.h
    M Source/WebCore/rendering/svg/RenderSVGRoot.cpp
    M Source/WebCore/rendering/svg/RenderSVGRoot.h
    M Source/WebCore/rendering/svg/RenderSVGShape.cpp
    M Source/WebCore/rendering/svg/RenderSVGText.cpp
    M Source/WebCore/rendering/svg/RenderSVGText.h

  Log Message:
  -----------
  [LBSE] Cache visual overflow rect computation
https://bugs.webkit.org/show_bug.cgi?id=306213

Reviewed by Rob Buis.

SVGBoundingBoxComputation::computeVisualOverflowRect() is expensive and appears
frequently in profiling. This patch ensures the cached visual overflow rect is
properly invalidated when:

1. Style changes affect visual overflow (stroke properties, outline, clip-path,
   mask, filter, marker references)
2. Referenced SVG resource content changes (e.g., a <rect> inside <clipPath>
   changes its geometry)

Add RenderLayerModelObject::invalidateCachedVisualOverflowRect() virtual method
with overrides in RenderSVGModelObject, RenderSVGRoot, and RenderSVGText.

Override RenderSVGResourceContainer::layout() to call repaintAllClients() after
children layout, ensuring clients are notified when resource content changes.

In CSSSVGResourceElementClient::resourceChanged(), always invalidate the cached
visual overflow rect, but skip the repaint call during layout since the existing
post-layout mechanism handles it.

Covered by existing tests.

* Source/WebCore/rendering/ReferencedSVGResources.cpp:
(WebCore::CSSSVGResourceElementClient::resourceChanged):
* Source/WebCore/rendering/RenderLayerModelObject.h:
(WebCore::RenderLayerModelObject::invalidateCachedVisualOverflowRect):
* Source/WebCore/rendering/svg/RenderSVGContainer.cpp:
(WebCore::RenderSVGContainer::layoutChildren):
* Source/WebCore/rendering/svg/RenderSVGImage.cpp:
(WebCore::RenderSVGImage::layout):
* Source/WebCore/rendering/svg/RenderSVGModelObject.cpp:
(WebCore::RenderSVGModelObject::styleDidChange):
* Source/WebCore/rendering/svg/RenderSVGModelObject.h:
(WebCore::RenderSVGModelObject::visualOverflowRectEquivalent const):
* Source/WebCore/rendering/svg/RenderSVGResourceContainer.cpp:
(WebCore::RenderSVGResourceContainer::layout):
* Source/WebCore/rendering/svg/RenderSVGResourceContainer.h:
* Source/WebCore/rendering/svg/RenderSVGRoot.cpp:
(WebCore::RenderSVGRoot::layoutChildren):
* Source/WebCore/rendering/svg/RenderSVGRoot.h:
* Source/WebCore/rendering/svg/RenderSVGShape.cpp:
(WebCore::RenderSVGShape::layout):
* Source/WebCore/rendering/svg/RenderSVGText.cpp:
(WebCore::RenderSVGText::updatePositionAndOverflow):
* Source/WebCore/rendering/svg/RenderSVGText.h:

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



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications

Reply via email to