[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