Bug 257970 - ASSERTION FAILED: willBeComposited == needsToBeComposited(layer, queryData)
Summary: ASSERTION FAILED: willBeComposited == needsToBeComposited(layer, queryData)
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: Compositing (show other bugs)
Version: Other
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Jer Noble
URL:
Keywords: InRadar
: 258095 258097 (view as bug list)
Depends on:
Blocks:
 
Reported: 2023-06-12 11:38 PDT by Bri Harris
Modified: 2023-06-30 09:27 PDT (History)
6 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Bri Harris 2023-06-12 11:38:07 PDT
platform/mac/media/unmute-after-loading.html

is a flaky crash on macOS Debug.


HISTORY:
https://results.webkit.org/?suite=layout-tests&test=platform%2Fmac%2Fmedia%2Funmute-after-loading.html

STDERR LINK: https://build.webkit.org/results/Apple-Ventura-Debug-AppleSilicon-WK2-Tests/265061@main%20(2760)/platform/mac/media/unmute-after-loading-stderr.txt

STDERR TEXT:
STDERR TEXT:
ASSERTION FAILED: willBeComposited == needsToBeComposited(layer, queryData)
/Volumes/Data/worker/Apple-Ventura-Debug-Build/build/Source/WebCore/rendering/RenderLayerCompositor.cpp(1201) : void WebCore::RenderLayerCompositor::computeCompositingRequirements(WebCore::RenderLayer *, WebCore::RenderLayer &, WebCore::LayerOverlapMap &, WebCore::RenderLayerCompositor::CompositingState &, WebCore::RenderLayerCompositor::BackingSharingState &, bool &)
1   0x151490100 WTFCrash
2   0x107908e40 WebCore::NetworkResourcesData::ResourceData::hasContent() const
3   0x1089ebbcc WebCore::RenderLayerCompositor::computeCompositingRequirements(WebCore::RenderLayer*, WebCore::RenderLayer&, WebCore::LayerOverlapMap&, WebCore::RenderLayerCompositor::CompositingState&, WebCore::RenderLayerCompositor::BackingSharingState&, bool&)
4   0x1089eb85c WebCore::RenderLayerCompositor::computeCompositingRequirements(WebCore::RenderLayer*, WebCore::RenderLayer&, WebCore::LayerOverlapMap&, WebCore::RenderLayerCompositor::CompositingState&, WebCore::RenderLayerCompositor::BackingSharingState&, bool&)
5   0x1089eb8e4 WebCore::RenderLayerCompositor::computeCompositingRequirements(WebCore::RenderLayer*, WebCore::RenderLayer&, WebCore::LayerOverlapMap&, WebCore::RenderLayerCompositor::CompositingState&, WebCore::RenderLayerCompositor::BackingSharingState&, bool&)
6   0x1089e999c WebCore::RenderLayerCompositor::updateCompositingLayers(WebCore::CompositingUpdateType, WebCore::RenderLayer*)
7   0x107e73008 WebCore::LocalFrameView::updateCompositingLayersAfterLayout()
8   0x107e76334 WebCore::LocalFrameView::didLayout(WTF::WeakPtr<WebCore::RenderElement, WTF::DefaultWeakPtrImpl>)
9   0x107e8f194 WebCore::LocalFrameViewLayoutContext::performLayout()
10  0x107e6d8e0 WebCore::LocalFrameViewLayoutContext::layout()
11  0x107e88680 WebCore::LocalFrameView::updateLayoutAndStyleIfNeededRecursive()
12  0x107ee318c WebCore::Page::layoutIfNeeded()
13  0x107ee3c0c WebCore::Page::updateRendering()
14  0x12cebcce4 WebKit::WebPage::updateRendering()
15  0x12c117990 WebKit::TiledCoreAnimationDrawingArea::updateRendering(WebKit::TiledCoreAnimationDrawingArea::UpdateRenderingType)
16  0x12c11b6cc WebKit::TiledCoreAnimationDrawingArea::renderingUpdateRunLoopCallback()
17  0x12c11d3a4 WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea(WebKit::WebPage&, WebKit::WebPageCreationParameters const&)::$_0::operator()() const
18  0x12c11d350 WTF::Detail::CallableWrapper<WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea(WebKit::WebPage&, WebKit::WebPageCreationParameters const&)::$_0, void>::call()
19  0x1067e1a8c WTF::Function<void ()>::operator()() const
20  0x1081d01d0 WebCore::RunLoopObserver::runLoopObserverFired()
21  0x1081d013c WebCore::RunLoopObserver::runLoopObserverFired(__CFRunLoopObserver*, unsigned long, void*)
22  0x18453d9f0 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__
23  0x18453d8dc __CFRunLoopDoObservers
24  0x18453c514 CFRunLoopRunSpecific
25  0x1854b5fcc -[NSRunLoop(NSRunLoop) runMode:beforeDate:]
26  0x18552eccc -[NSRunLoop(NSRunLoop) run]
27  0x1841ae594 _xpc_objc_main
28  0x1841adeb4 xpc_main
29  0x12b469e58 WebKit::XPCServiceMain(int, char const**)
30  0x12d3eb6d0 WKXPCServiceMain
31  0x10075bfa0 main
com.apple.WebKit.WebContent.Development terminated (pid 4291) for reason: crash
LEAK: 1 WebPageProxy
Comment 1 Radar WebKit Bug Importer 2023-06-12 11:38:35 PDT
<rdar://problem/110656130>
Comment 2 Simon Fraser (smfr) 2023-06-15 17:45:44 PDT
I confirmed that this happens when the answer to `canAccelerateVideoRendering()` changes without `RenderLayerBacking::contentChanged(VideoChanged)` being called.
Comment 3 Simon Fraser (smfr) 2023-06-15 18:24:29 PDT
Here's some logging showing the issue:

18:22:34.834 93261   RenderLayerCompositor::requiresCompositingForVideo - layer 0x112001b70 requiresImmediateCompositing:0 shouldDisplayVideo:1 canAccelerateVideoRendering:1
18:22:34.834 93261   HTMLMediaElement 0x11202ec30 supportsAcceleratedRendering - player 0x1101ad8d0 supportsAcceleratedRendering 1
18:22:34.834 93261   HTMLMediaElement 0x11202ec30 supportsAcceleratedRendering - player 0x1101ad8d0 supportsAcceleratedRendering 1
18:22:34.834 93261   HTMLMediaElement::prepareForLoad(B188CAA22C26631F) gesture = false
18:22:34.834 93261   HTMLMediaElement::createMediaPlayer(B188CAA22C26631F) 
18:22:34.834 93261   VideoLayerManagerObjC::didDestroyVideoLayer(B188CAA22C26631F) 
18:22:34.834 93261   VideoLayerManagerObjC::setTextTrackRepresentationLayer(B188CAA22C26631F) 
18:22:34.834 93261   HTMLMediaElement::setPlaybackRate(B188CAA22C26631F) 1
18:22:34.834 93261   MediaElementSession::clientWillBeginAutoplaying(B188CAA22C26631F) state = Autoplaying
18:22:34.834 93261   HTMLMediaElement::setShouldDelayLoadEvent(B188CAA22C26631F) true
18:22:34.834 93261   RenderLayerCompositor 0x1103584e0 [LocalFrameView 0x1120000b0 Frame 0x1100ac220 (main frame) file:///Volumes/Data/Development/system/webkit/OpenSource/LayoutTests/platform/mac/media/unmute-after-loading.html] updateCompositingLayers after layout contentLayersCount 6
18:22:34.834 93261   RenderLayerCompositor 0x1103584e0 [LocalFrameView 0x1120000b0 Frame 0x1100ac220 (main frame) file:///Volumes/Data/Development/system/webkit/OpenSource/LayoutTests/platform/mac/media/unmute-after-loading.html] updateCompositingLayers after layout contentLayersCount 6
18:22:34.834 93261   RenderLayerCompositor::computeCompositingRequirements when no change - layer 0x112001b70 video will composite: 1 because is already composited 1
18:22:34.834 93261   HTMLMediaElement 0x11202ec30 supportsAcceleratedRendering - player 0x1101ae250 supportsAcceleratedRendering 0
18:22:34.834 93261   RenderLayerCompositor::requiresCompositingForVideo - layer 0x112001b70 requiresImmediateCompositing:0 shouldDisplayVideo:1 canAccelerateVideoRendering:0
18:22:34.834 93261   HTMLMediaElement 0x11202ec30 supportsAcceleratedRendering - player 0x1101ae250 supportsAcceleratedRendering 0
18:22:34.834 93261   RenderLayerCompositor::computeCompositingRequirements - layer 0x112001b70 video will composite later: 0
18:22:34.834 93261   HTMLMediaElement 0x11202ec30 supportsAcceleratedRendering - player 0x1101ae250 supportsAcceleratedRendering 0
18:22:34.834 93261   RenderLayerCompositor::requiresCompositingForVideo - layer 0x112001b70 requiresImmediateCompositing:0 shouldDisplayVideo:1 canAccelerateVideoRendering:0
18:22:34.834 93261   HTMLMediaElement 0x11202ec30 supportsAcceleratedRendering - player 0x1101ae250 supportsAcceleratedRendering 0
18:22:34.834 93261   HTMLMediaElement 0x11202ec30 supportsAcceleratedRendering - player 0x1101ae250 supportsAcceleratedRendering 0
18:22:34.834 93261   RenderLayerCompositor::requiresCompositingForVideo - layer 0x112001b70 requiresImmediateCompositing:0 shouldDisplayVideo:1 canAccelerateVideoRendering:0
18:22:34.834 93261   HTMLMediaElement 0x11202ec30 supportsAcceleratedRendering - player 0x1101ae250 supportsAcceleratedRendering 0
18:22:34.834 93261   willBeComposited (1) != needsToBeComposited(layer, queryData) (0 for layer 0x112001b70

So HTMLMediaElement::createMediaPlayer creates a new MediaPlayer object, which does not support accelerated rendering, but RenderLayerBacking::contentChanged(VideoChanged) was never called.
Comment 4 Robert Jenner 2023-06-20 14:50:52 PDT
*** Bug 258095 has been marked as a duplicate of this bug. ***
Comment 5 Robert Jenner 2023-06-20 14:51:16 PDT
*** Bug 258097 has been marked as a duplicate of this bug. ***
Comment 6 Robert Jenner 2023-06-20 14:54:21 PDT
Marked bugs 258095 and 258097 as duplicates of this bug because the tests mentioned in those are hitting the same assertion, and appear to have a similar regression point. The tests that are hitting the same assertion at:


media/track/video-track-add-remove.html 
media/track/video-track-alternate-groups.html
media/modern-media-controls/pip-support/pip-support-enabled.html
Comment 7 Jer Noble 2023-06-29 23:42:29 PDT
Pull request: https://github.com/WebKit/WebKit/pull/15435
Comment 8 EWS 2023-06-30 09:26:59 PDT
Committed 265656@main (05ca73cb5029): <https://commits.webkit.org/265656@main>

Reviewed commits have been landed. Closing PR #15435 and removing active labels.