зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1664182 - Add JS::SetUseOffThreadParseGlobal and js::UseOffThreadParseGlobal, replacing JS::ContextOptions::setUseOffThreadParseGlobal. r=tcampbell
Differential Revision: https://phabricator.services.mozilla.com/D89784
This commit is contained in:
Родитель
f7175553bb
Коммит
0a00eddff0
|
@ -290,9 +290,7 @@ void LoadContextOptions(const char* aPrefName, void* /* aClosure */) {
|
||||||
.setPrivateClassFields(
|
.setPrivateClassFields(
|
||||||
GetWorkerPref<bool>("experimental.private_fields"_ns))
|
GetWorkerPref<bool>("experimental.private_fields"_ns))
|
||||||
.setPrivateClassMethods(
|
.setPrivateClassMethods(
|
||||||
GetWorkerPref<bool>("experimental.private_methods"_ns))
|
GetWorkerPref<bool>("experimental.private_methods"_ns));
|
||||||
.setUseOffThreadParseGlobal(
|
|
||||||
GetWorkerPref<bool>("off_thread_parse_global"_ns));
|
|
||||||
|
|
||||||
nsCOMPtr<nsIXULRuntime> xr = do_GetService("@mozilla.org/xre/runtime;1");
|
nsCOMPtr<nsIXULRuntime> xr = do_GetService("@mozilla.org/xre/runtime;1");
|
||||||
if (xr) {
|
if (xr) {
|
||||||
|
|
|
@ -45,8 +45,7 @@ class JS_PUBLIC_API ContextOptions {
|
||||||
#endif
|
#endif
|
||||||
fuzzing_(false),
|
fuzzing_(false),
|
||||||
privateClassFields_(false),
|
privateClassFields_(false),
|
||||||
privateClassMethods_(false),
|
privateClassMethods_(false) {
|
||||||
useOffThreadParseGlobal_(true) {
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool asmJS() const { return asmJS_; }
|
bool asmJS() const { return asmJS_; }
|
||||||
|
@ -154,12 +153,6 @@ class JS_PUBLIC_API ContextOptions {
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool useOffThreadParseGlobal() const { return useOffThreadParseGlobal_; }
|
|
||||||
ContextOptions& setUseOffThreadParseGlobal(bool use) {
|
|
||||||
useOffThreadParseGlobal_ = use;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Override to allow disabling the eval restriction security checks for
|
// Override to allow disabling the eval restriction security checks for
|
||||||
// this context.
|
// this context.
|
||||||
bool disableEvalSecurityChecks() const { return disableEvalSecurityChecks_; }
|
bool disableEvalSecurityChecks() const { return disableEvalSecurityChecks_; }
|
||||||
|
@ -269,9 +262,6 @@ class JS_PUBLIC_API ContextOptions {
|
||||||
bool fuzzing_ : 1;
|
bool fuzzing_ : 1;
|
||||||
bool privateClassFields_ : 1;
|
bool privateClassFields_ : 1;
|
||||||
bool privateClassMethods_ : 1;
|
bool privateClassMethods_ : 1;
|
||||||
|
|
||||||
// See TransitiveCompileOptions.useOffThreadParseGlobal.
|
|
||||||
bool useOffThreadParseGlobal_ : 1;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
JS_PUBLIC_API ContextOptions& ContextOptionsRef(JSContext* cx);
|
JS_PUBLIC_API ContextOptions& ContextOptionsRef(JSContext* cx);
|
||||||
|
|
|
@ -134,6 +134,17 @@ extern JS_PUBLIC_API bool FinishMultiOffThreadScriptsDecoder(
|
||||||
extern JS_PUBLIC_API void CancelMultiOffThreadScriptsDecoder(
|
extern JS_PUBLIC_API void CancelMultiOffThreadScriptsDecoder(
|
||||||
JSContext* cx, OffThreadToken* token);
|
JSContext* cx, OffThreadToken* token);
|
||||||
|
|
||||||
|
// Tell off-thread compilation to/not to use the parse global.
|
||||||
|
// The default value is true.
|
||||||
|
//
|
||||||
|
// If set to false, off-thread compilation will compile to stencil, and
|
||||||
|
// instantiate the stencil on main-thread.
|
||||||
|
extern JS_PUBLIC_API void SetUseOffThreadParseGlobal(bool value);
|
||||||
|
|
||||||
} // namespace JS
|
} // namespace JS
|
||||||
|
|
||||||
|
namespace js {
|
||||||
|
extern bool UseOffThreadParseGlobal();
|
||||||
|
} // namespace js
|
||||||
|
|
||||||
#endif /* js_OffThreadScriptCompilation_h */
|
#endif /* js_OffThreadScriptCompilation_h */
|
||||||
|
|
|
@ -62,6 +62,7 @@
|
||||||
#include "js/friend/WindowProxy.h" // js::ToWindowProxyIfWindow
|
#include "js/friend/WindowProxy.h" // js::ToWindowProxyIfWindow
|
||||||
#include "js/HashTable.h"
|
#include "js/HashTable.h"
|
||||||
#include "js/LocaleSensitive.h"
|
#include "js/LocaleSensitive.h"
|
||||||
|
#include "js/OffThreadScriptCompilation.h" // js::UseOffThreadParseGlobal
|
||||||
#include "js/PropertySpec.h"
|
#include "js/PropertySpec.h"
|
||||||
#include "js/RegExpFlags.h" // JS::RegExpFlag, JS::RegExpFlags
|
#include "js/RegExpFlags.h" // JS::RegExpFlag, JS::RegExpFlags
|
||||||
#include "js/SourceText.h"
|
#include "js/SourceText.h"
|
||||||
|
@ -177,7 +178,7 @@ static bool GetRealmConfiguration(JSContext* cx, unsigned argc, Value* vp) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool offThreadParseGlobal = cx->options().useOffThreadParseGlobal();
|
bool offThreadParseGlobal = js::UseOffThreadParseGlobal();
|
||||||
if (!JS_SetProperty(
|
if (!JS_SetProperty(
|
||||||
cx, info, "offThreadParseGlobal",
|
cx, info, "offThreadParseGlobal",
|
||||||
offThreadParseGlobal ? TrueHandleValue : FalseHandleValue)) {
|
offThreadParseGlobal ? TrueHandleValue : FalseHandleValue)) {
|
||||||
|
|
|
@ -61,7 +61,8 @@
|
||||||
#include "js/JSON.h"
|
#include "js/JSON.h"
|
||||||
#include "js/LocaleSensitive.h"
|
#include "js/LocaleSensitive.h"
|
||||||
#include "js/MemoryFunctions.h"
|
#include "js/MemoryFunctions.h"
|
||||||
#include "js/Object.h" // JS::SetPrivate
|
#include "js/Object.h" // JS::SetPrivate
|
||||||
|
#include "js/OffThreadScriptCompilation.h" // js::UseOffThreadParseGlobal
|
||||||
#include "js/PropertySpec.h"
|
#include "js/PropertySpec.h"
|
||||||
#include "js/Proxy.h"
|
#include "js/Proxy.h"
|
||||||
#include "js/SliceBudget.h"
|
#include "js/SliceBudget.h"
|
||||||
|
@ -3545,7 +3546,7 @@ JS::CompileOptions::CompileOptions(JSContext* cx)
|
||||||
cx->options().throwOnAsmJSValidationFailure();
|
cx->options().throwOnAsmJSValidationFailure();
|
||||||
privateClassFields = cx->options().privateClassFields();
|
privateClassFields = cx->options().privateClassFields();
|
||||||
privateClassMethods = cx->options().privateClassMethods();
|
privateClassMethods = cx->options().privateClassMethods();
|
||||||
useOffThreadParseGlobal = cx->options().useOffThreadParseGlobal();
|
useOffThreadParseGlobal = UseOffThreadParseGlobal();
|
||||||
|
|
||||||
sourcePragmas_ = cx->options().sourcePragmas();
|
sourcePragmas_ = cx->options().sourcePragmas();
|
||||||
|
|
||||||
|
|
|
@ -109,10 +109,10 @@
|
||||||
#include "js/Exception.h" // JS::StealPendingExceptionStack
|
#include "js/Exception.h" // JS::StealPendingExceptionStack
|
||||||
#include "js/experimental/CodeCoverage.h" // js::EnableCodeCoverage
|
#include "js/experimental/CodeCoverage.h" // js::EnableCodeCoverage
|
||||||
#include "js/experimental/JitInfo.h" // JSJit{Getter,Setter,Method}CallArgs, JSJitGetterInfo, JSJit{Getter,Setter}Op, JSJitInfo
|
#include "js/experimental/JitInfo.h" // JSJit{Getter,Setter,Method}CallArgs, JSJitGetterInfo, JSJit{Getter,Setter}Op, JSJitInfo
|
||||||
#include "js/experimental/SourceHook.h" // js::{Set,Forget,}SourceHook
|
#include "js/experimental/SourceHook.h" // js::{Set,Forget,}SourceHook
|
||||||
#include "js/experimental/TypedData.h" // JS_NewUint8Array
|
#include "js/experimental/TypedData.h" // JS_NewUint8Array
|
||||||
#include "js/friend/DumpFunctions.h" // JS::FormatStackDump
|
#include "js/friend/DumpFunctions.h" // JS::FormatStackDump
|
||||||
#include "js/friend/StackLimits.h" // js::CheckRecursionLimitConservative
|
#include "js/friend/StackLimits.h" // js::CheckRecursionLimitConservative
|
||||||
#include "js/friend/WindowProxy.h" // js::IsWindowProxy, js::SetWindowProxyClass, js::ToWindowProxyIfWindow, js::ToWindowIfWindowProxy
|
#include "js/friend/WindowProxy.h" // js::IsWindowProxy, js::SetWindowProxyClass, js::ToWindowProxyIfWindow, js::ToWindowIfWindowProxy
|
||||||
#include "js/GCAPI.h" // JS::AutoCheckCannotGC
|
#include "js/GCAPI.h" // JS::AutoCheckCannotGC
|
||||||
#include "js/GCVector.h"
|
#include "js/GCVector.h"
|
||||||
|
@ -121,6 +121,7 @@
|
||||||
#include "js/MemoryFunctions.h"
|
#include "js/MemoryFunctions.h"
|
||||||
#include "js/Modules.h" // JS::GetModulePrivate, JS::SetModule{DynamicImport,Metadata,Resolve}Hook, JS::SetModulePrivate
|
#include "js/Modules.h" // JS::GetModulePrivate, JS::SetModule{DynamicImport,Metadata,Resolve}Hook, JS::SetModulePrivate
|
||||||
#include "js/Object.h" // JS::GetClass, JS::GetCompartment, JS::GetReservedSlot, JS::SetReservedSlot
|
#include "js/Object.h" // JS::GetClass, JS::GetCompartment, JS::GetReservedSlot, JS::SetReservedSlot
|
||||||
|
#include "js/OffThreadScriptCompilation.h" // JS::SetUseOffThreadParseGlobal
|
||||||
#include "js/Printf.h"
|
#include "js/Printf.h"
|
||||||
#include "js/PropertySpec.h"
|
#include "js/PropertySpec.h"
|
||||||
#include "js/Realm.h"
|
#include "js/Realm.h"
|
||||||
|
@ -10270,8 +10271,9 @@ static bool SetContextOptions(JSContext* cx, const OptionParser& op) {
|
||||||
.setAsyncStack(enableAsyncStacks)
|
.setAsyncStack(enableAsyncStacks)
|
||||||
.setAsyncStackCaptureDebuggeeOnly(enableAsyncStackCaptureDebuggeeOnly)
|
.setAsyncStackCaptureDebuggeeOnly(enableAsyncStackCaptureDebuggeeOnly)
|
||||||
.setPrivateClassFields(enablePrivateClassFields)
|
.setPrivateClassFields(enablePrivateClassFields)
|
||||||
.setPrivateClassMethods(enablePrivateClassMethods)
|
.setPrivateClassMethods(enablePrivateClassMethods);
|
||||||
.setUseOffThreadParseGlobal(useOffThreadParseGlobal);
|
|
||||||
|
JS::SetUseOffThreadParseGlobal(useOffThreadParseGlobal);
|
||||||
|
|
||||||
if (op.getBoolOption("no-ion-for-main-context")) {
|
if (op.getBoolOption("no-ion-for-main-context")) {
|
||||||
JS::ContextOptionsRef(cx).setDisableIon();
|
JS::ContextOptionsRef(cx).setDisableIon();
|
||||||
|
|
|
@ -17,8 +17,9 @@
|
||||||
#include "frontend/BytecodeCompilation.h"
|
#include "frontend/BytecodeCompilation.h"
|
||||||
#include "frontend/CompilationInfo.h" // frontend::CompilationInfo, frontend::CompilationGCOutput
|
#include "frontend/CompilationInfo.h" // frontend::CompilationInfo, frontend::CompilationGCOutput
|
||||||
#include "jit/IonCompileTask.h"
|
#include "jit/IonCompileTask.h"
|
||||||
#include "js/ContextOptions.h" // JS::ContextOptions
|
#include "js/ContextOptions.h" // JS::ContextOptions
|
||||||
#include "js/friend/StackLimits.h" // js::ReportOverRecursed
|
#include "js/friend/StackLimits.h" // js::ReportOverRecursed
|
||||||
|
#include "js/OffThreadScriptCompilation.h" // js::UseOffThreadParseGlobal
|
||||||
#include "js/SourceText.h"
|
#include "js/SourceText.h"
|
||||||
#include "js/UniquePtr.h"
|
#include "js/UniquePtr.h"
|
||||||
#include "js/Utility.h"
|
#include "js/Utility.h"
|
||||||
|
@ -2072,7 +2073,9 @@ JSObject* GlobalHelperThreadState::finishModuleParseTask(
|
||||||
|
|
||||||
MOZ_ASSERT(script->isModule());
|
MOZ_ASSERT(script->isModule());
|
||||||
|
|
||||||
if (!cx->options().useOffThreadParseGlobal()) {
|
// NOTE: StartOffThreadParseTask alters CompileOption only for decode task.
|
||||||
|
// UseOffThreadParseGlobal() should match CompileOption here.
|
||||||
|
if (!UseOffThreadParseGlobal()) {
|
||||||
return script->module();
|
return script->module();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -207,3 +207,13 @@ JS_PUBLIC_API void JS::CancelMultiOffThreadScriptsDecoder(
|
||||||
HelperThreadState().cancelParseTask(cx->runtime(),
|
HelperThreadState().cancelParseTask(cx->runtime(),
|
||||||
ParseTaskKind::MultiScriptsDecode, token);
|
ParseTaskKind::MultiScriptsDecode, token);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace js {
|
||||||
|
bool gUseOffThreadParseGlobal = true;
|
||||||
|
} // namespace js
|
||||||
|
|
||||||
|
JS_PUBLIC_API void JS::SetUseOffThreadParseGlobal(bool value) {
|
||||||
|
gUseOffThreadParseGlobal = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool js::UseOffThreadParseGlobal() { return gUseOffThreadParseGlobal; }
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
#include "jsapi.h"
|
#include "jsapi.h"
|
||||||
#include "js/ContextOptions.h"
|
#include "js/ContextOptions.h"
|
||||||
#include "js/MemoryMetrics.h"
|
#include "js/MemoryMetrics.h"
|
||||||
|
#include "js/OffThreadScriptCompilation.h"
|
||||||
#include "mozilla/dom/BindingUtils.h"
|
#include "mozilla/dom/BindingUtils.h"
|
||||||
#include "mozilla/dom/ContentChild.h"
|
#include "mozilla/dom/ContentChild.h"
|
||||||
#include "mozilla/dom/Element.h"
|
#include "mozilla/dom/Element.h"
|
||||||
|
@ -866,6 +867,9 @@ static void LoadStartupJSPrefs(XPCJSContext* xpccx) {
|
||||||
bool disableWasmHugeMemory =
|
bool disableWasmHugeMemory =
|
||||||
Preferences::GetBool(JS_OPTIONS_DOT_STR "wasm_disable_huge_memory");
|
Preferences::GetBool(JS_OPTIONS_DOT_STR "wasm_disable_huge_memory");
|
||||||
|
|
||||||
|
bool useOffThreadParseGlobal =
|
||||||
|
Preferences::GetBool(JS_OPTIONS_DOT_STR "off_thread_parse_global");
|
||||||
|
|
||||||
nsCOMPtr<nsIXULRuntime> xr = do_GetService("@mozilla.org/xre/runtime;1");
|
nsCOMPtr<nsIXULRuntime> xr = do_GetService("@mozilla.org/xre/runtime;1");
|
||||||
if (xr) {
|
if (xr) {
|
||||||
bool safeMode = false;
|
bool safeMode = false;
|
||||||
|
@ -927,6 +931,8 @@ static void LoadStartupJSPrefs(XPCJSContext* xpccx) {
|
||||||
bool disabledHugeMemory = JS::DisableWasmHugeMemory();
|
bool disabledHugeMemory = JS::DisableWasmHugeMemory();
|
||||||
MOZ_RELEASE_ASSERT(disabledHugeMemory);
|
MOZ_RELEASE_ASSERT(disabledHugeMemory);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JS::SetUseOffThreadParseGlobal(useOffThreadParseGlobal);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ReloadPrefsCallback(const char* pref, void* aXpccx) {
|
static void ReloadPrefsCallback(const char* pref, void* aXpccx) {
|
||||||
|
@ -1001,9 +1007,6 @@ static void ReloadPrefsCallback(const char* pref, void* aXpccx) {
|
||||||
Preferences::GetBool(JS_OPTIONS_DOT_STR "experimental.private_methods");
|
Preferences::GetBool(JS_OPTIONS_DOT_STR "experimental.private_methods");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool useOffThreadParseGlobal =
|
|
||||||
Preferences::GetBool(JS_OPTIONS_DOT_STR "off_thread_parse_global");
|
|
||||||
|
|
||||||
#ifdef JS_GC_ZEAL
|
#ifdef JS_GC_ZEAL
|
||||||
int32_t zeal = Preferences::GetInt(JS_OPTIONS_DOT_STR "gczeal", -1);
|
int32_t zeal = Preferences::GetInt(JS_OPTIONS_DOT_STR "gczeal", -1);
|
||||||
int32_t zeal_frequency = Preferences::GetInt(
|
int32_t zeal_frequency = Preferences::GetInt(
|
||||||
|
@ -1047,8 +1050,7 @@ static void ReloadPrefsCallback(const char* pref, void* aXpccx) {
|
||||||
.setThrowOnDebuggeeWouldRun(throwOnDebuggeeWouldRun)
|
.setThrowOnDebuggeeWouldRun(throwOnDebuggeeWouldRun)
|
||||||
.setDumpStackOnDebuggeeWouldRun(dumpStackOnDebuggeeWouldRun)
|
.setDumpStackOnDebuggeeWouldRun(dumpStackOnDebuggeeWouldRun)
|
||||||
.setPrivateClassFields(privateFieldsEnabled)
|
.setPrivateClassFields(privateFieldsEnabled)
|
||||||
.setPrivateClassMethods(privateMethodsEnabled)
|
.setPrivateClassMethods(privateMethodsEnabled);
|
||||||
.setUseOffThreadParseGlobal(useOffThreadParseGlobal);
|
|
||||||
|
|
||||||
nsCOMPtr<nsIXULRuntime> xr = do_GetService("@mozilla.org/xre/runtime;1");
|
nsCOMPtr<nsIXULRuntime> xr = do_GetService("@mozilla.org/xre/runtime;1");
|
||||||
if (xr) {
|
if (xr) {
|
||||||
|
|
Загрузка…
Ссылка в новой задаче