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