Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 2565fa1a44bc44b731e4da04063ef89422265f9f
      
https://github.com/WebKit/WebKit/commit/2565fa1a44bc44b731e4da04063ef89422265f9f
  Author: Nikolas Zimmermann <[email protected]>
  Date:   2026-10-15 (Thu, 15 Oct 2026)

  Changed paths:
    A 
LayoutTests/platform/glib/svg/repaint/text-in-group-move-repaint-rects-expected.txt
    A 
LayoutTests/platform/glib/svg/repaint/text-in-group-scale-repaint-rects-expected.txt
    A 
LayoutTests/platform/ios/svg/repaint/text-in-group-move-repaint-rects-expected.txt
    A 
LayoutTests/platform/ios/svg/repaint/text-in-group-scale-repaint-rects-expected.txt
    M LayoutTests/platform/mac-tahoe-wk2-lbse-text/TestExpectations
    M 
LayoutTests/platform/mac-tahoe-wk2-lbse-text/svg/in-html/overflow-repaint-expected.txt
    M 
LayoutTests/platform/mac-tahoe-wk2-lbse-text/svg/repaint/text-repainting-after-modifying-container-transform-repaint-rects-expected.txt
    A 
LayoutTests/svg/repaint/clip-path-content-grow-on-group-repaint-rects-expected.txt
    A LayoutTests/svg/repaint/clip-path-content-grow-on-group-repaint-rects.html
    A 
LayoutTests/svg/repaint/clip-path-id-change-on-group-repaint-rects-expected.txt
    A LayoutTests/svg/repaint/clip-path-id-change-on-group-repaint-rects.html
    A 
LayoutTests/svg/repaint/clip-path-units-change-on-group-repaint-rects-expected.txt
    A LayoutTests/svg/repaint/clip-path-units-change-on-group-repaint-rects.html
    A LayoutTests/svg/repaint/group-display-show-repaint-rects-expected.txt
    A LayoutTests/svg/repaint/group-display-show-repaint-rects.html
    A LayoutTests/svg/repaint/group-outline-appear-repaint-rects-expected.txt
    A LayoutTests/svg/repaint/group-outline-appear-repaint-rects.html
    A LayoutTests/svg/repaint/group-outline-offset-repaint-rects-expected.txt
    A LayoutTests/svg/repaint/group-outline-offset-repaint-rects.html
    A LayoutTests/svg/repaint/group-outline-width-repaint-rects-expected.txt
    A LayoutTests/svg/repaint/group-outline-width-repaint-rects.html
    A LayoutTests/svg/repaint/image-in-group-move-repaint-rects-expected.txt
    A LayoutTests/svg/repaint/image-in-group-move-repaint-rects.html
    A 
LayoutTests/svg/repaint/mask-content-grow-on-group-repaint-rects-expected.txt
    A LayoutTests/svg/repaint/mask-content-grow-on-group-repaint-rects.html
    A 
LayoutTests/svg/repaint/mask-region-grow-on-group-repaint-rects-expected.txt
    A LayoutTests/svg/repaint/mask-region-grow-on-group-repaint-rects.html
    A LayoutTests/svg/repaint/nested-svg-height-grow-repaint-rects-expected.txt
    A LayoutTests/svg/repaint/nested-svg-height-grow-repaint-rects.html
    A 
LayoutTests/svg/repaint/nested-svg-overflow-hidden-repaint-rects-expected.txt
    A LayoutTests/svg/repaint/nested-svg-overflow-hidden-repaint-rects.html
    A LayoutTests/svg/repaint/nested-svg-width-grow-repaint-rects-expected.txt
    A LayoutTests/svg/repaint/nested-svg-width-grow-repaint-rects.html
    A 
LayoutTests/svg/repaint/rect-in-composited-group-transform-repaint-rects-expected.txt
    A 
LayoutTests/svg/repaint/rect-in-composited-group-transform-repaint-rects.html
    A 
LayoutTests/svg/repaint/rect-in-fill-box-group-move-repaint-rects-expected.txt
    A LayoutTests/svg/repaint/rect-in-fill-box-group-move-repaint-rects.html
    A 
LayoutTests/svg/repaint/rect-in-fill-box-group-rigid-move-repaint-rects-expected.txt
    A 
LayoutTests/svg/repaint/rect-in-fill-box-group-rigid-move-repaint-rects.html
    A 
LayoutTests/svg/repaint/rect-in-group-css-transform-repaint-rects-expected.txt
    A LayoutTests/svg/repaint/rect-in-group-css-transform-repaint-rects.html
    A LayoutTests/svg/repaint/rect-in-group-move-repaint-rects-expected.txt
    A LayoutTests/svg/repaint/rect-in-group-move-repaint-rects.html
    A LayoutTests/svg/repaint/rect-in-group-scale-repaint-rects-expected.txt
    A LayoutTests/svg/repaint/rect-in-group-scale-repaint-rects.html
    A LayoutTests/svg/repaint/rect-in-group-translate-repaint-rects-expected.txt
    A LayoutTests/svg/repaint/rect-in-group-translate-repaint-rects.html
    A 
LayoutTests/svg/repaint/rect-in-nested-svg-viewbox-repaint-rects-expected.txt
    A LayoutTests/svg/repaint/rect-in-nested-svg-viewbox-repaint-rects.html
    A 
LayoutTests/svg/repaint/rect-in-rotated-group-move-repaint-rects-expected.txt
    A LayoutTests/svg/repaint/rect-in-rotated-group-move-repaint-rects.html
    A LayoutTests/svg/repaint/text-in-group-move-repaint-rects-expected.txt
    A LayoutTests/svg/repaint/text-in-group-move-repaint-rects.html
    A LayoutTests/svg/repaint/text-in-group-scale-repaint-rects-expected.txt
    A LayoutTests/svg/repaint/text-in-group-scale-repaint-rects.html
    A LayoutTests/svg/repaint/use-symbol-width-grow-repaint-rects-expected.txt
    A LayoutTests/svg/repaint/use-symbol-width-grow-repaint-rects.html
    M Source/WebCore/rendering/RenderLayer.cpp
    M Source/WebCore/rendering/RenderLayer.h
    M Source/WebCore/rendering/RenderLayerSVGAdditions.cpp
    M Source/WebCore/rendering/svg/RenderSVGContainer.cpp
    M Source/WebCore/rendering/svg/RenderSVGContainer.h
    M Source/WebCore/rendering/svg/RenderSVGImage.cpp
    M Source/WebCore/rendering/svg/RenderSVGShape.cpp
    M Source/WebCore/rendering/svg/RenderSVGText.cpp
    M Source/WebCore/rendering/svg/SVGContainerLayout.cpp
    M Source/WebCore/rendering/svg/SVGContainerLayout.h

  Log Message:
  -----------
  [LBSE] Fix repaints of SVG groups and their content
https://bugs.webkit.org/show_bug.cgi?id=326975

Reviewed by Rob Buis.

Two kinds of changes left stale content on screen: changing content inside
a <g>, and changing the <g> itself while its content stays the same.

1. Children of a <g> repaint during their own layout, but the <g> sets their
final position only after all of them are laid out (children are positioned
relative to the upper edge of the container bounding box). So a moved <image>
never repainted its new place, and text or shapes repainted at the wrong place.
Now images, text and shapes compute their final position during their own
layout. A debug assertion checks that the <g> later agrees.

2. A group with a layer does not repaint itself, it relies on its children.
That fails whenever the group changes but its children do not, for example:
a new transform, a new viewBox or size of a nested <svg>, an outline, a
clip-path or mask change, or a group that is shown again. Now the layer
remembers its transform, and repaints its old and new area when that
transform changes or when the group itself changed.

Add repaint tests for all relevant cases, that we previously missed.

text-repainting-after-modifying-container-transform now repaints the same
rects as the legacy engine, and non-scaling-stroke-transform-animation
finally passes.

* 
LayoutTests/platform/glib/svg/repaint/text-in-group-move-repaint-rects-expected.txt:
 Added.
* 
LayoutTests/platform/glib/svg/repaint/text-in-group-scale-repaint-rects-expected.txt:
 Added.
* 
LayoutTests/platform/ios/svg/repaint/text-in-group-move-repaint-rects-expected.txt:
 Added.
* 
LayoutTests/platform/ios/svg/repaint/text-in-group-scale-repaint-rects-expected.txt:
 Added.
* LayoutTests/platform/mac-tahoe-wk2-lbse-text/TestExpectations:
* 
LayoutTests/platform/mac-tahoe-wk2-lbse-text/svg/in-html/overflow-repaint-expected.txt:
* 
LayoutTests/platform/mac-tahoe-wk2-lbse-text/svg/repaint/text-repainting-after-modifying-container-transform-repaint-rects-expected.txt:
* 
LayoutTests/svg/repaint/clip-path-content-grow-on-group-repaint-rects-expected.txt:
 Added.
* LayoutTests/svg/repaint/clip-path-content-grow-on-group-repaint-rects.html: 
Added.
* 
LayoutTests/svg/repaint/clip-path-id-change-on-group-repaint-rects-expected.txt:
 Added.
* LayoutTests/svg/repaint/clip-path-id-change-on-group-repaint-rects.html: 
Added.
* 
LayoutTests/svg/repaint/clip-path-units-change-on-group-repaint-rects-expected.txt:
 Added.
* LayoutTests/svg/repaint/clip-path-units-change-on-group-repaint-rects.html: 
Added.
* LayoutTests/svg/repaint/group-display-show-repaint-rects-expected.txt: Added.
* LayoutTests/svg/repaint/group-display-show-repaint-rects.html: Added.
* LayoutTests/svg/repaint/group-outline-appear-repaint-rects-expected.txt: 
Added.
* LayoutTests/svg/repaint/group-outline-appear-repaint-rects.html: Added.
* LayoutTests/svg/repaint/group-outline-offset-repaint-rects-expected.txt: 
Added.
* LayoutTests/svg/repaint/group-outline-offset-repaint-rects.html: Added.
* LayoutTests/svg/repaint/group-outline-width-repaint-rects-expected.txt: Added.
* LayoutTests/svg/repaint/group-outline-width-repaint-rects.html: Added.
* LayoutTests/svg/repaint/image-in-group-move-repaint-rects-expected.txt: Added.
* LayoutTests/svg/repaint/image-in-group-move-repaint-rects.html: Added.
* 
LayoutTests/svg/repaint/mask-content-grow-on-group-repaint-rects-expected.txt: 
Added.
* LayoutTests/svg/repaint/mask-content-grow-on-group-repaint-rects.html: Added.
* LayoutTests/svg/repaint/mask-region-grow-on-group-repaint-rects-expected.txt: 
Added.
* LayoutTests/svg/repaint/mask-region-grow-on-group-repaint-rects.html: Added.
* LayoutTests/svg/repaint/nested-svg-height-grow-repaint-rects-expected.txt: 
Added.
* LayoutTests/svg/repaint/nested-svg-height-grow-repaint-rects.html: Added.
* 
LayoutTests/svg/repaint/nested-svg-overflow-hidden-repaint-rects-expected.txt: 
Added.
* LayoutTests/svg/repaint/nested-svg-overflow-hidden-repaint-rects.html: Added.
* LayoutTests/svg/repaint/nested-svg-width-grow-repaint-rects-expected.txt: 
Added.
* LayoutTests/svg/repaint/nested-svg-width-grow-repaint-rects.html: Added.
* 
LayoutTests/svg/repaint/rect-in-composited-group-transform-repaint-rects-expected.txt:
 Added.
* 
LayoutTests/svg/repaint/rect-in-composited-group-transform-repaint-rects.html: 
Added.
* 
LayoutTests/svg/repaint/rect-in-fill-box-group-move-repaint-rects-expected.txt: 
Added.
* LayoutTests/svg/repaint/rect-in-fill-box-group-move-repaint-rects.html: Added.
* 
LayoutTests/svg/repaint/rect-in-fill-box-group-rigid-move-repaint-rects-expected.txt:
 Added.
* LayoutTests/svg/repaint/rect-in-fill-box-group-rigid-move-repaint-rects.html: 
Added.
* 
LayoutTests/svg/repaint/rect-in-group-css-transform-repaint-rects-expected.txt: 
Added.
* LayoutTests/svg/repaint/rect-in-group-css-transform-repaint-rects.html: Added.
* LayoutTests/svg/repaint/rect-in-group-move-repaint-rects-expected.txt: Added.
* LayoutTests/svg/repaint/rect-in-group-move-repaint-rects.html: Added.
* LayoutTests/svg/repaint/rect-in-group-scale-repaint-rects-expected.txt: Added.
* LayoutTests/svg/repaint/rect-in-group-scale-repaint-rects.html: Added.
* LayoutTests/svg/repaint/rect-in-group-translate-repaint-rects-expected.txt: 
Added.
* LayoutTests/svg/repaint/rect-in-group-translate-repaint-rects.html: Added.
* 
LayoutTests/svg/repaint/rect-in-nested-svg-viewbox-repaint-rects-expected.txt: 
Added.
* LayoutTests/svg/repaint/rect-in-nested-svg-viewbox-repaint-rects.html: Added.
* 
LayoutTests/svg/repaint/rect-in-rotated-group-move-repaint-rects-expected.txt: 
Added.
* LayoutTests/svg/repaint/rect-in-rotated-group-move-repaint-rects.html: Added.
* LayoutTests/svg/repaint/text-in-group-move-repaint-rects-expected.txt: Added.
* LayoutTests/svg/repaint/text-in-group-move-repaint-rects.html: Added.
* LayoutTests/svg/repaint/text-in-group-scale-repaint-rects-expected.txt: Added.
* LayoutTests/svg/repaint/text-in-group-scale-repaint-rects.html: Added.
* LayoutTests/svg/repaint/use-symbol-width-grow-repaint-rects-expected.txt: 
Added.
* LayoutTests/svg/repaint/use-symbol-width-grow-repaint-rects.html: Added.
* Source/WebCore/rendering/RenderLayer.cpp:
(WebCore::RenderLayer::recursiveUpdateLayerPositions):
(WebCore::RenderLayer::computeRepaintRects):
* Source/WebCore/rendering/RenderLayer.h:
* Source/WebCore/rendering/RenderLayerSVGAdditions.cpp:
(WebCore::RenderLayer::shouldSkipRepaintAfterLayoutForSVG const):
(WebCore::RenderLayer::containerTransformForRepaintForSVG const):
(WebCore::RenderLayer::setNeedsFullRepaintIfSVGContainerTransformChanged):
* Source/WebCore/rendering/svg/RenderSVGContainer.cpp:
(WebCore::RenderSVGContainer::transformToParentUserSpace const):
* Source/WebCore/rendering/svg/RenderSVGContainer.h:
* Source/WebCore/rendering/svg/RenderSVGImage.cpp:
(WebCore::RenderSVGImage::layout):
* Source/WebCore/rendering/svg/RenderSVGShape.cpp:
(WebCore::RenderSVGShape::layout):
* Source/WebCore/rendering/svg/RenderSVGText.cpp:
(WebCore::RenderSVGText::updatePositionAndOverflow):
* Source/WebCore/rendering/svg/SVGContainerLayout.cpp:
(WebCore::SVGContainerLayout::SVGContainerLayout):
(WebCore::SVGContainerLayout::containerLayoutLocation):
(WebCore::SVGContainerLayout::layoutLocationRelativeToContainer):
(WebCore::SVGContainerLayout::positionChildrenRelativeToContainer):
* Source/WebCore/rendering/svg/SVGContainerLayout.h:

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



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

Reply via email to