☠☠ backed out by 7682952aed89 ☠ ☠ | |
author | Tooru Fujisawa <arai_a@mac.com> |
Tue, 13 Feb 2024 14:34:23 +0000 (17 months ago) | |
changeset 695521 | 9593275c01956136f1909bde5dac28d2c9f11ed2 |
parent 695520 | 2e2f01296233a4f7adb3d1fac1c4e67d5f7b16ab |
child 695522 | c02d879622bdd03e06cd1ecddb9a335f46b6975d |
push id | 199908 |
push user | arai_a@mac.com |
push date | Tue, 13 Feb 2024 14:42:56 +0000 (17 months ago) |
treeherder | autoland@d5df64b38425 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | jonco |
bugs | 1803810 |
milestone | 124.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
js/xpconnect/loader/mozJSModuleLoader.cpp | file | annotate | diff | comparison | revisions | |
js/xpconnect/loader/mozJSModuleLoader.h | file | annotate | diff | comparison | revisions |
--- a/js/xpconnect/loader/mozJSModuleLoader.cpp +++ b/js/xpconnect/loader/mozJSModuleLoader.cpp @@ -445,16 +445,17 @@ void mozJSModuleLoader::FindTargetObject } } } void mozJSModuleLoader::InitStatics() { MOZ_ASSERT(!sSelf); sSelf = new mozJSModuleLoader(); RegisterWeakMemoryReporter(sSelf); + NonSharedGlobalSyncModuleLoaderScope::InitStatics(); } void mozJSModuleLoader::UnloadLoaders() { if (sSelf) { sSelf->Unload(); } if (sDevToolsLoader) { sDevToolsLoader->Unload(); @@ -1956,63 +1957,67 @@ size_t mozJSModuleLoader::ModuleEntry::S n += aMallocSizeOf(location); return n; } //---------------------------------------------------------------------- /* static */ -mozJSModuleLoader* NonSharedGlobalSyncModuleLoaderScope::sActiveLoader = - nullptr; +MOZ_THREAD_LOCAL(mozJSModuleLoader*) +NonSharedGlobalSyncModuleLoaderScope::sTlsActiveLoader; + +void NonSharedGlobalSyncModuleLoaderScope::InitStatics() { + sTlsActiveLoader.infallibleInit(); +} NonSharedGlobalSyncModuleLoaderScope::NonSharedGlobalSyncModuleLoaderScope( JSContext* aCx, nsIGlobalObject* aGlobal) { - // Only the main thread is supported for now. - MOZ_ASSERT(NS_IsMainThread()); - MOZ_ASSERT(!mozJSModuleLoader::IsSharedSystemGlobal(aGlobal)); - MOZ_ASSERT(!mozJSModuleLoader::IsDevToolsLoaderGlobal(aGlobal)); + MOZ_ASSERT_IF(NS_IsMainThread(), + !mozJSModuleLoader::IsSharedSystemGlobal(aGlobal)); + MOZ_ASSERT_IF(NS_IsMainThread(), + !mozJSModuleLoader::IsDevToolsLoaderGlobal(aGlobal)); mAsyncModuleLoader = aGlobal->GetModuleLoader(aCx); MOZ_ASSERT(mAsyncModuleLoader, "The consumer should guarantee the global returns non-null module " "loader"); mLoader = new mozJSModuleLoader(); RegisterWeakMemoryReporter(mLoader); mLoader->InitSyncModuleLoaderForGlobal(aGlobal); mAsyncModuleLoader->CopyModulesTo(mLoader->mModuleLoader); mMaybeOverride.emplace(mAsyncModuleLoader, mLoader->mModuleLoader); - MOZ_ASSERT(!sActiveLoader); - sActiveLoader = mLoader; + MOZ_ASSERT(!sTlsActiveLoader.get()); + sTlsActiveLoader.set(mLoader); } NonSharedGlobalSyncModuleLoaderScope::~NonSharedGlobalSyncModuleLoaderScope() { - MOZ_ASSERT(sActiveLoader == mLoader); - sActiveLoader = nullptr; + MOZ_ASSERT(sTlsActiveLoader.get() == mLoader); + sTlsActiveLoader.set(nullptr); mLoader->DisconnectSyncModuleLoaderFromGlobal(); UnregisterWeakMemoryReporter(mLoader); } void NonSharedGlobalSyncModuleLoaderScope::Finish() { mLoader->mModuleLoader->MoveModulesTo(mAsyncModuleLoader); } /* static */ bool NonSharedGlobalSyncModuleLoaderScope::IsActive() { - return !!sActiveLoader; + return !!sTlsActiveLoader.get(); } -/* static */ +/*static */ mozJSModuleLoader* NonSharedGlobalSyncModuleLoaderScope::ActiveLoader() { - return sActiveLoader; + return sTlsActiveLoader.get(); } //---------------------------------------------------------------------- JSCLContextHelper::JSCLContextHelper(JSContext* aCx) : mContext(aCx), mBuf(nullptr) {} JSCLContextHelper::~JSCLContextHelper() {
--- a/js/xpconnect/loader/mozJSModuleLoader.h +++ b/js/xpconnect/loader/mozJSModuleLoader.h @@ -10,16 +10,17 @@ #include "SyncModuleLoader.h" #include "mozilla/Attributes.h" // MOZ_STACK_CLASS #include "mozilla/dom/ScriptSettings.h" #include "mozilla/FileLocation.h" #include "mozilla/Maybe.h" // mozilla::Maybe #include "mozilla/MemoryReporting.h" #include "mozilla/RefPtr.h" // RefPtr, mozilla::StaticRefPtr #include "mozilla/StaticPtr.h" +#include "mozilla/ThreadLocal.h" // MOZ_THREAD_LOCAL #include "nsIMemoryReporter.h" #include "nsISupports.h" #include "nsIURI.h" #include "nsClassHashtable.h" #include "jsapi.h" #include "js/experimental/JSStencil.h" #include "SkipCheckForBrokenURLOrZeroSized.h" @@ -310,23 +311,25 @@ class MOZ_STACK_CLASS NonSharedGlobalSyn void Finish(); // Returns true if another instance of NonSharedGlobalSyncModuleLoaderScope // is on stack. static bool IsActive(); static mozJSModuleLoader* ActiveLoader(); + static void InitStatics(); + private: RefPtr<mozJSModuleLoader> mLoader; - // The module loader on the stack. + // Reference to thread-local module loader on the stack. // This is used by another sync module load during a sync module load is // ongoing. - static mozJSModuleLoader* sActiveLoader; + static MOZ_THREAD_LOCAL(mozJSModuleLoader*) sTlsActiveLoader; // The module loader of the target global. RefPtr<JS::loader::ModuleLoaderBase> mAsyncModuleLoader; mozilla::Maybe<JS::loader::AutoOverrideModuleLoader> mMaybeOverride; }; } // namespace mozilla::loader