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

Reply via email to