Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 967dba77d23fa5c99511879e4f6b9b520789cc05
https://github.com/WebKit/WebKit/commit/967dba77d23fa5c99511879e4f6b9b520789cc05
Author: Nikolas Zimmermann <[email protected]>
Date: 2026-04-17 (Fri, 17 Apr 2026)
Changed paths:
M Source/WebCore/Sources.txt
M Source/WebCore/WebCore.xcodeproj/project.pbxproj
M Source/WebCore/rendering/RenderElement.cpp
M Source/WebCore/rendering/RenderLayer.cpp
M Source/WebCore/rendering/RenderLayer.h
M Source/WebCore/rendering/RenderLayerInlines.h
A Source/WebCore/rendering/RenderLayerSVGAdditions.cpp
A Source/WebCore/rendering/RenderLayerSVGAdditionsInlines.h
M Source/WebCore/rendering/RenderLayerScrollableArea.cpp
M Source/WebCore/rendering/RenderSearchField.h
M Source/WebCore/rendering/RenderTheme.cpp
M Source/WebCore/rendering/shapes/LayoutShape.cpp
M Source/WebCore/rendering/svg/RenderSVGBlock.cpp
M Source/WebCore/rendering/svg/RenderSVGPath.cpp
M Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp
M Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp
M Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp
M Source/WebCore/rendering/svg/SVGTextQuery.cpp
M Source/WebCore/svg/SVGGraphicsElement.cpp
Log Message:
-----------
[LBSE] Move SVG-specific data out of RenderLayer into a lazily-allocated
SVGData struct
https://bugs.webkit.org/show_bug.cgi?id=310224
Reviewed by Simon Fraser.
Move SVG-specific state into a lazily-allocated SVGData struct, keeping
RenderLayer
final with no virtual dispatch. SVG logic lives in RenderLayerSVGAdditions.cpp
and
RenderLayerSVGAdditionsInlines.h, called from RenderLayer.
We chose not to introduce a RenderLayerSVG subclass because making RenderLayer
non-final would prevent the compiler from devirtualizing calls, adding vtable
pointer overhead to every layer and indirect dispatch on hot paths like
hasVisibleContentForPainting() and setupClipPath(), which is a 0.25 - 0.7%
regression on SpeedoMeter 3 -- avoid that.
Covered by existing tests.
* Source/WebCore/Sources.txt:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/rendering/RenderElement.cpp:
(WebCore::RenderElement::isInsideEntirelyHiddenLayer const):
* Source/WebCore/rendering/RenderLayer.cpp:
(WebCore::RenderLayer::RenderLayer):
(WebCore::RenderLayer::recursiveUpdateLayerPositions):
(WebCore::RenderLayer::referenceBoxRectForClipPath const):
(WebCore::RenderLayer::updateAncestorDependentState):
(WebCore::RenderLayer::computeHasVisibleContent const):
(WebCore::RenderLayer::shouldRepaintAfterLayout const):
(WebCore::RenderLayer::convertToLayerCoords const):
(WebCore::RenderLayer::setupClipPath):
(WebCore::RenderLayer::paintLayerContents):
(WebCore::RenderLayer::paintForegroundForFragments):
(WebCore::RenderLayer::hitTestLayer):
(WebCore::RenderLayer::calculateClipRects const):
(WebCore::RenderLayer::paintSVGResourceLayer): Deleted.
* Source/WebCore/rendering/RenderLayer.h:
* Source/WebCore/rendering/RenderLayerInlines.h:
(WebCore::RenderLayer::enclosingSVGHiddenOrResourceContainer const): Deleted.
* Source/WebCore/rendering/RenderLayerSVGAdditions.cpp: Added.
(WebCore::RenderLayer::hasVisibleContentForPaintingForSVG const):
(WebCore::RenderLayer::paintResourceLayerForSVG):
(WebCore::RenderLayer::setupClipPathIfNeededForSVG):
(WebCore::RenderLayer::paintForegroundForFragmentsForSVG):
(WebCore::RenderLayer::shouldSkipRepaintAfterLayoutForSVG const):
(WebCore::RenderLayer::shouldSkipHitTestForSVG const):
(WebCore::RenderLayer::hasFailedFilterForSVG const):
(WebCore::RenderLayer::updateAncestorDependentStateForSVG):
* Source/WebCore/rendering/RenderLayerSVGAdditionsInlines.h: Added.
(WebCore::RenderLayer::isPaintingResourceLayerForSVG const):
(WebCore::RenderLayer::enclosingHiddenOrResourceContainerForSVG const):
* Source/WebCore/rendering/RenderLayerScrollableArea.cpp:
* Source/WebCore/rendering/RenderSearchField.h:
* Source/WebCore/rendering/RenderTheme.cpp:
* Source/WebCore/rendering/shapes/LayoutShape.cpp:
* Source/WebCore/rendering/svg/RenderSVGBlock.cpp:
* Source/WebCore/rendering/svg/RenderSVGPath.cpp:
(WebCore::RenderSVGPath::drawMarkers):
* Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp:
(WebCore::RenderSVGResourceClipper::applyMaskClipping):
* Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp:
(WebCore::RenderSVGResourceMasker::drawContentIntoContext):
* Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp:
(WebCore::RenderSVGResourcePattern::createTileImage const):
* Source/WebCore/rendering/svg/SVGTextQuery.cpp:
* Source/WebCore/svg/SVGGraphicsElement.cpp:
(WebCore::SVGGraphicsElement::invalidateResourceImageBuffersIfNeeded):
Canonical link: https://commits.webkit.org/311493@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications