[webkit-changes] [WebKit/WebKit] 6fa1d3: REGRESSION (273999 at main): Elements fail to render ...

Simon Fraser noreply at github.com
Tue Mar 26 21:15:39 PDT 2024


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 6fa1d3b94cd776cb8af563c46495c66e3c483668
      https://github.com/WebKit/WebKit/commit/6fa1d3b94cd776cb8af563c46495c66e3c483668
  Author: Simon Fraser <simon.fraser at apple.com>
  Date:   2024-03-26 (Tue, 26 Mar 2024)

  Changed paths:
    A LayoutTests/compositing/shared-backing/composited-descendants-should-prevent-sharing-expected.html
    A LayoutTests/compositing/shared-backing/composited-descendants-should-prevent-sharing.html
    M LayoutTests/platform/ios-wk2/scrollingcoordinator/scrolling-tree/absolute-in-nested-overflow-scroll-expected.txt
    M LayoutTests/scrollingcoordinator/scrolling-tree/absolute-in-nested-overflow-scroll-expected.txt
    M Source/WebCore/rendering/RenderLayerCompositor.cpp

  Log Message:
  -----------
  REGRESSION (273999 at main): Elements fail to render in Spinnaker
https://bugs.webkit.org/show_bug.cgi?id=271710
rdar://124483601

Reviewed by Alan Baradlay.

273999 at main reverted some backing sharing behavior to an older configuration, but this brought back
a bug which affects Spinnaker dashboards. The test reduction has a series of overflow scrollers, both
siblings and nested, and an element later in the tree that ends up obscured when the bug occurs.

A simplified paint-order tree dump (via the Compositing log channel) looks like this:

-S---------C-c-- 0x118000810 RenderView 0x1180002c0
-S-----------c--   + 0x118001850 RenderBlock 0x118001700 HTML 0x118001050
-S---------C-c--     + 0x1180044a0 RenderBlock (relative positioned) 0x118004350 DIV 0x118003350 class='container'
-S-O-----XxC----       - 0x118004740 RenderTextControl 0x118005460 TEXTAREA 0x118003c20 class='fixed'
---O-------CPc--       + 0x1180049e0 RenderBlock (relative positioned) 0x1180045f0 DIV 0x1180033d0 id='main'
--NO-------C-c--         n 0x118004dd0 RenderBlock 0x118004890 DIV 0x118003530 class='outer-scroller'
--NO-------C--s-           n 0x118005070 RenderBlock 0x118004c80 DIV 0x1180035b0 class='scroller'
------------p-s-       + 0x1180055b0 RenderBlock (relative positioned) 0x1180051c0 DIV 0x118003790 class='indicator'

Note the P on '0x1180049e0' indicating that it's a shared backing provider, and the p on '0x1180055b0' showing that
it paints into that shared backing. However, the normal flow descendant layers of 0x1180049e0 (0x118004dd0 and 0x118005070)
are both [C]composited, so they appear on top of 0x1180055b0, which is the bug.

A composited layer normally interrupts a backing sharing sequence. However, we only determined that 0x1180049e0 could
be a backing provider after traversing its descendant layers in `updateBackingSharingAfterDescendantTraversal()`,
and made it one despite it having composited descendants. So fix `updateBackingSharingAfterDescendantTraversal()`
to check that.

This undoes the backing sharing that happened in `scrollingcoordinator/scrolling-tree/absolute-in-nested-overflow-scroll`,
but that sharing was undone on scrolling anyway.

* LayoutTests/compositing/shared-backing/composited-descendants-should-prevent-sharing-expected.html: Added.
* LayoutTests/compositing/shared-backing/composited-descendants-should-prevent-sharing.html: Added.
* Source/WebCore/rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::updateBackingSharingAfterDescendantTraversal):

Canonical link: https://commits.webkit.org/276720@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