GPUP GraphicsContextGL creation failure cannot be detected The WebGLRenderingContextBase first tries to create GPUP GraphicsContextGL. If this fails, it tries to create WP GraphicsContextGL. This is not consistent. ChromeClient should decide what type to instantiate.
Created attachment 445194 [details] Patch
Created attachment 445197 [details] Patch
Created attachment 445199 [details] Patch
Comment on attachment 445199 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=445199&action=review > Source/WebCore/ChangeLog:22 > + Fix a bug where GPUP WebGL would use in-process context if the lost context would be recreated. > + > + No new tests, a refactor. Not quite a pure refactoring if it fixes a bug.
Comment on attachment 445199 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=445199&action=review > Source/WebCore/platform/graphics/WebProcessGraphicsContextGL.h:37 > +#include "GraphicsContextGL.h" > + > +#include <wtf/RefCounted.h> > + > +namespace WebCore { > + > +WEBCORE_EXPORT RefPtr<GraphicsContextGL> createWebProcessGraphicsContextGL(const GraphicsContextGLAttributes&); I guess this function could also just go to GraphicsContextGL.h?
Created attachment 445258 [details] Patch for landing
Created attachment 445262 [details] Patch for landing
Created attachment 445265 [details] Patch for landing
Committed r286209 (244591@main): <https://commits.webkit.org/244591@main> All reviewed patches have been landed. Closing bug and clearing flags on attachment 445265 [details].
<rdar://problem/85811767>
This change has caused a number of crashes in offscreen canvas tests on GTK and WPE (which only run on GTK and WPE): http/wpt/offscreen-canvas/getContext-webgl.html [ Crash ] http/wpt/offscreen-canvas/transferToImageBitmap-webgl.html [ Crash ] imported/w3c/web-platform-tests/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.getcontext.html [ Crash ] imported/w3c/web-platform-tests/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.getcontext.worker.html [ Crash ] imported/w3c/web-platform-tests/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.resize.html [ Crash ] imported/w3c/web-platform-tests/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap.html [ Crash ] imported/w3c/web-platform-tests/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap.w.html [ Crash ] imported/w3c/web-platform-tests/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transferrable.html [ Crash ] imported/w3c/web-platform-tests/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transferrable.w.html [ Crash ] With a backtrace like the following: #0 0x00007f806d263347 in WebCore::WebGLRenderingContextBase::create(WebCore::CanvasBase&, WebCore::GraphicsContextGLAttributes&, WebCore::GraphicsContextGLWebGLVersion) () at /app/webkit/WebKitBuild/Release/lib/libwebkit2gtk-4.1.so.0 #1 0x00007f806d1e9ccc in WebCore::OffscreenCanvas::createContextWebGL(WebCore::OffscreenCanvas::RenderingContextType, WebCore::GraphicsContextGLAttributes&&) () at /app/webkit/WebKitBuild/Release/lib/libwebkit2gtk-4.1.so.0 #2 0x00007f806d1ea02e in WebCore::OffscreenCanvas::getContext(JSC::JSGlobalObject&, WebCore::OffscreenCanvas::RenderingContextType, WTF::Vector<JSC::Strong<JSC::Unknown, (JSC::ShouldStrongDestructorGrabLock)0>, 0ul, WTF::CrashOnOverflow, 16ul, WTF::FastMalloc>&&) () at /app/webkit/WebKitBuild/Release/lib/libwebkit2gtk-4.1.so.0 #3 0x00007f806c2e0447 in WebCore::jsOffscreenCanvasPrototypeFunction_getContext(JSC::JSGlobalObject*, JSC::CallFrame*) () at /app/webkit/WebKitBuild/Release/lib/libwebkit2gtk-4.1.so.0 #4 0x00007f8021cff1d8 in () #5 0x00007fff5faf3cb0 in () #6 0x00007f80682dc20d in op_call_slow_return_location () at /app/webkit/WebKitBuild/Release/lib/libjavascriptcoregtk-4.1.so.0 #7 0x0000000000000000 in () Not having debugged this in depth, my suspicion is that this change is not taking into account the offscreen case where hostWindow is null.