Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 6fa1d3b94cd776cb8af563c46495c66e3c483668
      
https://github.com/WebKit/WebKit/commit/6fa1d3b94cd776cb8af563c46495c66e3c483668
  Author: Simon Fraser <simon.fra...@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@main): Elements fail to render in Spinnaker
https://bugs.webkit.org/show_bug.cgi?id=271710
rdar://124483601

Reviewed by Alan Baradlay.

273999@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
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to