Created attachment 456813 [details] case 1 Case 1: When you click the button 'window.open' will use default features like 'opener' to open the current URL(https://output.jsbin.com/hezopac) with the search param '?canvas' to run canvas animation. Before the target page(https://output.jsbin.com/hezopac?canvas) is ready, it will create some new offscreen canvas elements for the test. And then those two pages that use the same process will be hung when ctx.fillText called more than 10,000. Case 2: Disable create the offscreen canvas and click the button 'window.open' at the bootstrap page1(https://output.jsbin.com/yotawur) to create the test page2(https://output.jsbin.com/yotawur?canvas). And then click the button 'window.open' on page2 to open the test page3 with the same URL(https://output.jsbin.com/yotawur?canvas). And then those third pages that use the same process also will be hung.
<rdar://problem/91355603>
Does this reproduce this in Safari 15.4 (macOS) and/or iOS 15.4?
Neve mind, I can reproduce in a recent build.
WebContent is blocked on: + ! : 8990 WebCore::RenderHTMLCanvas::paintReplaced(WebCore::PaintInfo&, WebCore::LayoutPoint const&) (in WebCore) + 705 [0x5332bf4b1] + ! : 8990 WebCore::HTMLCanvasElement::paint(WebCore::GraphicsContext&, WebCore::LayoutRect const&) (in WebCore) + 695 [0x5346f4ae7] + ! : 8989 WebCore::ConcreteImageBuffer<WebKit::ImageBufferShareableMappedIOSurfaceBackend>::draw(WebCore::GraphicsContext&, WebCore::FloatRect const&, WebCore::FloatRect const&, WebCore::ImagePaintingOptions const&) (in WebKit) + 53 [0x52ad64c41] + ! : | 8988 WebKit::RemoteImageBufferProxy<WebKit::ImageBufferShareableMappedIOSurfaceBackend>::flushDrawingContext() (in WebKit) + 142 [0x52b2ed702] + ! : | + 8987 WebKit::RemoteRenderingBackendProxy::waitForDidFlush() (in WebKit) + 90 [0x52b28077c] + ! : | + ! 8987 IPC::Connection::waitForMessage(IPC::MessageName, unsigned long long, IPC::Timeout, WTF::OptionSet<IPC::WaitForOption>) (in WebKit) + 458 [0x52af43214] + ! : | + ! 8987 bool WTF::Condition::waitUntilUnchecked<WTF::Lock>(WTF::Lock&, WTF::TimeWithDynamicClockType const&) (in WebKit) + 154 [0x52ac03f64] + ! : | + ! 8986 WTF::ParkingLot::parkConditionallyImpl(void const*, WTF::ScopedLambda<bool ()> const&, WTF::ScopedLambda<void ()> const&, WTF::TimeWithDynamicClockType const&) (in JavaScriptCore) + 2263 [0x529ae0057] + ! : | + ! : 8986 _pthread_cond_wait (in libsystem_pthread.dylib) + 1249 [0x7ff804c7ea4f] + ! : | + ! : 8986 __psynch_cvwait (in libsystem_kernel.dylib) + 10 [0x7ff804c4440a] + ! : | + ! 1 WTF::ParkingLot::parkConditionallyImpl(void const*, WTF::ScopedLambda<bool ()> const&, WTF::ScopedLambda<void ()> const&, WTF::TimeWithDynamicClockType const&) (in JavaScriptCore) + 114 [0x529adf7f2] GPU Process is idle.
We're hitting "Exceeded timeout while waiting for flush in remote rendering backend: 62."
Thanks for the report. I think this has the same cause as bug 237674. That bug should be used to track the fix and then the fix should be used to verify fixing also this test case. *** This bug has been marked as a duplicate of bug 237674 ***