[webkit-changes] [WebKit/WebKit] 4b1ca4: REGRESSION(268028 at main): Graphics artifacts when s...

Simon Fraser noreply at github.com
Fri Feb 2 10:33:28 PST 2024


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 4b1ca4f3add8483f04957886f45626e1e9b28a80
      https://github.com/WebKit/WebKit/commit/4b1ca4f3add8483f04957886f45626e1e9b28a80
  Author: Simon Fraser <simon.fraser at apple.com>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    A LayoutTests/compositing/shared-backing/overflow-scroll/composite-via-negative-z-descendants-interrupts-sequence-expected.html
    A LayoutTests/compositing/shared-backing/overflow-scroll/composite-via-negative-z-descendants-interrupts-sequence.html
    A LayoutTests/compositing/shared-backing/overflow-scroll/zero-sized-fixed-interrupts-sharing-sequence-expected.txt
    A LayoutTests/compositing/shared-backing/overflow-scroll/zero-sized-fixed-interrupts-sharing-sequence.html
    A LayoutTests/platform/ios-wk2/compositing/shared-backing/overflow-scroll/zero-sized-fixed-interrupts-sharing-sequence-expected.txt
    M Source/WebCore/rendering/RenderLayerCompositor.cpp

  Log Message:
  -----------
  REGRESSION(268028 at main): Graphics artifacts when scrolling Heroku app
https://bugs.webkit.org/show_bug.cgi?id=266926
rdar://120373474

Reviewed by Alan Baradlay.

Backing sharing is used to reduce memory use by allowing multiple RenderLayers (normally siblings),
which share the same stacking context ancestor, to render into the same compositing layer. This has
to be done in a way that preserves back-to-front paint order. The common case where this kicks in is
a non-stacking context overflow:scroll with position:relative descendants.

A backing sharing sequence (a set of layers painting into the same shared backing) has to be interrupted
when a layer becomes composited in order to preserve paint order. 268028 at main inadvertently changed the
condition used to end a backing sharing sequence, breaking rendering with various content configurations.

Restore the condition to the previous state, which is to end the sequence if the the provider layer
is the same one we had before traversing into descendant layers.

Add two tests which detect the behavior change.

* LayoutTests/compositing/shared-backing/overflow-scroll/composite-via-negative-z-descendants-interrupts-sequence-expected.html: Added.
* LayoutTests/compositing/shared-backing/overflow-scroll/composite-via-negative-z-descendants-interrupts-sequence.html: Added.
* LayoutTests/compositing/shared-backing/overflow-scroll/zero-sized-fixed-interrupts-sharing-sequence-expected.txt: Added.
* LayoutTests/compositing/shared-backing/overflow-scroll/zero-sized-fixed-interrupts-sharing-sequence.html: Added.
* LayoutTests/platform/ios-wk2/compositing/shared-backing/overflow-scroll/zero-sized-fixed-interrupts-sharing-sequence-expected.txt: Added.
* Source/WebCore/rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::updateBackingSharingAfterDescendantTraversal):

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




More information about the webkit-changes mailing list