[webkit-changes] [WebKit/WebKit] 5dda91: Some images on www.dandelionchocolate.com fail to ...

mattwoodrow noreply at github.com
Wed Dec 18 23:38:48 PST 2024


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 5dda919ecebde78601eeac9319eec101f6377124
      https://github.com/WebKit/WebKit/commit/5dda919ecebde78601eeac9319eec101f6377124
  Author: Matt Woodrow <mattwoodrow at apple.com>
  Date:   2024-12-18 (Wed, 18 Dec 2024)

  Changed paths:
    M Source/WebCore/page/LocalFrameView.cpp
    M Source/WebCore/page/LocalFrameView.h
    M Source/WebCore/page/LocalFrameViewLayoutContext.cpp
    M Source/WebCore/page/LocalFrameViewLayoutContext.h
    M Source/WebCore/rendering/RenderElement.cpp
    M Source/WebCore/rendering/RenderElement.h
    M Source/WebCore/rendering/RenderLayer.cpp
    M Source/WebCore/rendering/RenderLayer.h
    M Source/WebCore/rendering/RenderObject.cpp

  Log Message:
  -----------
  Some images on www.dandelionchocolate.com fail to load.
https://bugs.webkit.org/show_bug.cgi?id=284860
<rdar://141520514>

Reviewed by Simon Fraser.

This is a bad interaction between the 284780 at main changes, and the old
‘simplified repaint’ optimisation.

A style change that results in a compositing layer being created/destroyed
previously wrote new ‘repaint rects’ onto the RenderLayer. There was a comment
complaining about this, as computing repaint rects while layout was dirty was
invalid.

The new code in 284780 at main just sets the dirty bit on the layer, so that we
know to recompute repaint rects after the next layout.

If that next layout ends up being a ‘simplified’ one, then the simplified
repaint optimisations applied to the layer positions update and stop the repaint
rects from being computed.

The simplified repaint optimisation isn’t valid when dirty bits are set outside
of the layout immediately preceding the layer position update.

Fix this by removing the simplified repaint optimization, since it should be
superceeded by the layer dirty flags.

* Source/WebCore/page/LocalFrameView.cpp:
(WebCore::LocalFrameView::didLayout):
* Source/WebCore/page/LocalFrameView.h:
* Source/WebCore/page/LocalFrameViewLayoutContext.cpp:
(WebCore::LocalFrameViewLayoutContext::performLayout):
(WebCore::LocalFrameViewLayoutContext::didLayout):
(WebCore::LocalFrameViewLayoutContext::flushUpdateLayerPositions):
* Source/WebCore/page/LocalFrameViewLayoutContext.h:
* Source/WebCore/rendering/RenderElement.cpp:
(WebCore::RenderElement::didVisitSinceLayout const): Deleted.
* Source/WebCore/rendering/RenderElement.h:
(WebCore::RenderElement::setLayoutIdentifier): Deleted.
(WebCore::RenderElement::layoutIdentifier const): Deleted.
* Source/WebCore/rendering/RenderLayer.cpp:
(WebCore::RenderLayer::updateLayerPositionsAfterStyleChange):
(WebCore::RenderLayer::updateLayerPositionsAfterLayout):
(WebCore::RenderLayer::recursiveUpdateLayerPositions):
* Source/WebCore/rendering/RenderLayer.h:
* Source/WebCore/rendering/RenderObject.cpp:
(WebCore::RenderObject::clearNeedsLayout):
(WebCore::RenderObject::markContainingBlocksForLayout):
(WebCore::RenderObject::outputRenderObject const):
(WebCore::setIsSimplifiedLayoutRootForLayerIfApplicable): Deleted.

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



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


More information about the webkit-changes mailing list