From 7224a179032e83a87d3e2102a3bcb45212022417 Mon Sep 17 00:00:00 2001 From: Brian Smith Date: Sat, 4 Jun 2022 17:13:45 -0500 Subject: [PATCH] Issue #1905 - Part 2c - Fix OpenGL crash caused by calling [NSOpenGLContext setView:] on the Compositor thread. Starting with SDK 10.14 I believe, many functions have main thread checks, including setView: and update. So we now move the code in the updateGLContext method into doDrawRect which runs on the main thread. --- widget/cocoa/nsChildView.h | 1 - widget/cocoa/nsChildView.mm | 20 ++++++++------------ 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/widget/cocoa/nsChildView.h b/widget/cocoa/nsChildView.h index 2817c8d415..7b998a6c5c 100644 --- a/widget/cocoa/nsChildView.h +++ b/widget/cocoa/nsChildView.h @@ -224,7 +224,6 @@ class WidgetRenderingContext; enter:(BOOL)aEnter exitFrom:(mozilla::WidgetMouseEvent::ExitFrom)aExitFrom; -- (void)updateGLContext; - (void)_surfaceNeedsUpdate:(NSNotification*)notification; - (bool)preRender:(NSOpenGLContext *)aGLContext; diff --git a/widget/cocoa/nsChildView.mm b/widget/cocoa/nsChildView.mm index e2aa6729e9..a3a3bacbf9 100644 --- a/widget/cocoa/nsChildView.mm +++ b/widget/cocoa/nsChildView.mm @@ -3309,16 +3309,11 @@ NSEvent* gLastDragMouseDownEvent = nil; if (!mGLContext) { mGLContext = aGLContext; [mGLContext retain]; - mNeedsGLUpdate = true; + mNeedsGLUpdate = YES; } CGLLockContext((CGLContextObj)[aGLContext CGLContextObj]); - if (mNeedsGLUpdate) { - [self updateGLContext]; - mNeedsGLUpdate = NO; - } - return true; NS_OBJC_END_TRY_ABORT_BLOCK_RETURN(false); @@ -3472,12 +3467,6 @@ NSEvent* gLastDragMouseDownEvent = nil; return YES; } --(void)updateGLContext -{ - [mGLContext setView:mPixelHostingView]; - [mGLContext update]; -} - - (void)_surfaceNeedsUpdate:(NSNotification*)notification { if (mGLContext) { @@ -3592,6 +3581,13 @@ NSEvent* gLastDragMouseDownEvent = nil; LayoutDeviceIntRegion region(geckoBounds); mGeckoChild->PaintWindow(region); + + if (mNeedsGLUpdate) { + [mGLContext setView:mPixelHostingView]; + [mGLContext update]; + mNeedsGLUpdate = NO; + } + return; }