From 6f4da14ee21429de5e2222caecd8d07a9b74144c Mon Sep 17 00:00:00 2001 From: ownedbywuigi Date: Sat, 28 Mar 2026 07:34:59 +0000 Subject: [PATCH] Add JIT warm-up threshold preferences for baseline and ion compilation --- js/xpconnect/src/XPCJSContext.cpp | 21 +++++++++++++++++++-- modules/libpref/init/all.js | 5 +++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/js/xpconnect/src/XPCJSContext.cpp b/js/xpconnect/src/XPCJSContext.cpp index e93854a9f9..3ca3da6b8b 100644 --- a/js/xpconnect/src/XPCJSContext.cpp +++ b/js/xpconnect/src/XPCJSContext.cpp @@ -1426,6 +1426,10 @@ ReloadPrefsCallback(const char* pref, void* data) bool useBaselineEager = Preferences::GetBool(JS_OPTIONS_DOT_STR "baselinejit.unsafe_eager_compilation"); bool useIonEager = Preferences::GetBool(JS_OPTIONS_DOT_STR "ion.unsafe_eager_compilation"); + int32_t baselineWarmUpThreshold = Preferences::GetInt(JS_OPTIONS_DOT_STR + "baselinejit.threshold", -1); + int32_t ionWarmUpThreshold = Preferences::GetInt(JS_OPTIONS_DOT_STR + "ion.threshold", -1); sDiscardSystemSource = Preferences::GetBool(JS_OPTIONS_DOT_STR "discardSystemSource"); @@ -1472,10 +1476,23 @@ ReloadPrefsCallback(const char* pref, void* data) JS_SetParallelParsingEnabled(cx, parallelParsing); JS_SetOffthreadIonCompilationEnabled(cx, offthreadIonCompilation); + + // -1 means "use engine default". + if (baselineWarmUpThreshold < -1) + baselineWarmUpThreshold = -1; + if (ionWarmUpThreshold < -1) + ionWarmUpThreshold = -1; + + // Eager compilation prefs still override threshold prefs. + if (useBaselineEager) + baselineWarmUpThreshold = 0; + if (useIonEager) + ionWarmUpThreshold = 0; + JS_SetGlobalJitCompilerOption(cx, JSJITCOMPILER_BASELINE_WARMUP_TRIGGER, - useBaselineEager ? 0 : -1); + baselineWarmUpThreshold); JS_SetGlobalJitCompilerOption(cx, JSJITCOMPILER_ION_WARMUP_TRIGGER, - useIonEager ? 0 : -1); + ionWarmUpThreshold); JS_SetGlobalJitCompilerOption(cx, JSJITCOMPILER_UNBOXED_OBJECTS, unboxedObjects); JS_SetGlobalJitCompilerOption(cx, JSJITCOMPILER_ION_INLINING, diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js index 5b60e0fabe..d0fe3e38d3 100644 --- a/modules/libpref/init/all.js +++ b/modules/libpref/init/all.js @@ -1265,6 +1265,11 @@ pref("javascript.options.unboxed_objects", false); pref("javascript.options.baselinejit", true); pref("javascript.options.ion", true); pref("javascript.options.ion.inlining", true); +// JIT warm-up thresholds (-1 keeps engine defaults). +// Lower values can improve sustained throughput on large script bundles +// (e.g. React/jQuery-heavy apps) at some startup compile cost. +pref("javascript.options.baselinejit.threshold", 8); +pref("javascript.options.ion.threshold", 80); pref("javascript.options.asmjs", true); pref("javascript.options.wasm", true); // wasm jit crashes in 32bit builds because of 64bit casts so