[tbb-commits] [tor-browser/tor-browser-68.1.0esr-9.0-2] Bug 1578075 - Increase stack size of paint thread/workers on OSX Catalina or higher to workaround crash from recursion in CoreText. r=jrmuizel, a=RyanVM
gk at torproject.org
gk at torproject.org
Fri Sep 27 05:41:59 UTC 2019
commit 632458daf11b954319219ea62e259f50b4fd9ed3
Author: Ryan Hunt <rhunt at eqrion.net>
Date: Tue Sep 10 15:20:34 2019 +0000
Bug 1578075 - Increase stack size of paint thread/workers on OSX Catalina or higher to workaround crash from recursion in CoreText. r=jrmuizel, a=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D45370
--HG--
extra : source : cd0ea6dafa051426035949cfbbfdeb04c1c05661
extra : intermediate-source : ffefc518e569164c2c2e62258504bdc69d111bb3
---
gfx/layers/PaintThread.cpp | 24 +++++++++++++++++++++++-
widget/cocoa/nsCocoaFeatures.h | 1 +
widget/cocoa/nsCocoaFeatures.mm | 5 +++++
3 files changed, 29 insertions(+), 1 deletion(-)
diff --git a/gfx/layers/PaintThread.cpp b/gfx/layers/PaintThread.cpp
index 3ee7c86760ea..c35bf472d682 100644
--- a/gfx/layers/PaintThread.cpp
+++ b/gfx/layers/PaintThread.cpp
@@ -19,7 +19,11 @@
#include "mozilla/Preferences.h"
#include "mozilla/SharedThreadPool.h"
#include "mozilla/SyncRunnable.h"
+#ifdef XP_MACOSX
+#include "nsCocoaFeatures.h"
+#endif
#include "nsIPropertyBag2.h"
+#include "nsIThreadManager.h"
#include "nsServiceManagerUtils.h"
#include "prsystem.h"
@@ -69,11 +73,28 @@ void PaintThread::Start() {
}
}
+static uint32_t GetPaintThreadStackSize() {
+#ifndef XP_MACOSX
+ return nsIThreadManager::DEFAULT_STACK_SIZE;
+#else
+ // Workaround bug 1578075 by increasing the stack size of paint threads
+ if (nsCocoaFeatures::OnCatalinaOrLater()) {
+ static const uint32_t kCatalinaPaintThreadStackSize = 512 * 1024;
+ static_assert(kCatalinaPaintThreadStackSize >= nsIThreadManager::DEFAULT_STACK_SIZE,
+ "update default stack size of paint "
+ "workers");
+ return kCatalinaPaintThreadStackSize;
+ }
+ return nsIThreadManager::DEFAULT_STACK_SIZE;
+#endif
+}
+
bool PaintThread::Init() {
MOZ_ASSERT(NS_IsMainThread());
RefPtr<nsIThread> thread;
- nsresult rv = NS_NewNamedThread("PaintThread", getter_AddRefs(thread));
+ nsresult rv = NS_NewNamedThread("PaintThread", getter_AddRefs(thread),
+ nullptr, GetPaintThreadStackSize());
if (NS_FAILED(rv)) {
return false;
}
@@ -102,6 +123,7 @@ void PaintThread::InitPaintWorkers() {
if (count != 1) {
mPaintWorkers =
SharedThreadPool::Get(NS_LITERAL_CSTRING("PaintWorker"), count);
+ mPaintWorkers->SetThreadStackSize(GetPaintThreadStackSize());
}
}
diff --git a/widget/cocoa/nsCocoaFeatures.h b/widget/cocoa/nsCocoaFeatures.h
index a4581c4d3195..0cc5a2d5c165 100644
--- a/widget/cocoa/nsCocoaFeatures.h
+++ b/widget/cocoa/nsCocoaFeatures.h
@@ -24,6 +24,7 @@ class nsCocoaFeatures {
static bool OnSierraOrLater();
static bool OnHighSierraOrLater();
static bool OnMojaveOrLater();
+ static bool OnCatalinaOrLater();
static bool IsAtLeastVersion(int32_t aMajor, int32_t aMinor,
int32_t aBugFix = 0);
diff --git a/widget/cocoa/nsCocoaFeatures.mm b/widget/cocoa/nsCocoaFeatures.mm
index 77bd3507e35f..41ca60e3b721 100644
--- a/widget/cocoa/nsCocoaFeatures.mm
+++ b/widget/cocoa/nsCocoaFeatures.mm
@@ -21,6 +21,7 @@
#define MAC_OS_X_VERSION_10_12_HEX 0x000010C0
#define MAC_OS_X_VERSION_10_13_HEX 0x000010D0
#define MAC_OS_X_VERSION_10_14_HEX 0x000010E0
+#define MAC_OS_X_VERSION_10_15_HEX 0x000010F0
#include "nsCocoaFeatures.h"
#include "nsCocoaUtils.h"
@@ -165,6 +166,10 @@ bool Gecko_OnHighSierraOrLater() { return nsCocoaFeatures::OnHighSierraOrLater()
return (OSXVersion() >= MAC_OS_X_VERSION_10_14_HEX);
}
+/* static */ bool nsCocoaFeatures::OnCatalinaOrLater() {
+ return (OSXVersion() >= MAC_OS_X_VERSION_10_15_HEX);
+}
+
/* static */ bool nsCocoaFeatures::IsAtLeastVersion(int32_t aMajor, int32_t aMinor,
int32_t aBugFix) {
return OSXVersion() >= GetVersion(aMajor, aMinor, aBugFix);
More information about the tbb-commits
mailing list