mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-09 11:25:00 +00:00
Bug 1674465 - Add CompileOptions::useStencilXDR. r=arai
No changes to behaviour. This splits the useOffThreadParseGlobal flag into cases that care about the format and cases that care about the GC. Depends on D95380 Differential Revision: https://phabricator.services.mozilla.com/D95381
This commit is contained in:
parent
85148b16e3
commit
cbf947ada3
@ -133,6 +133,9 @@ class JS_PUBLIC_API TransitiveCompileOptions {
|
||||
bool privateClassFields = false;
|
||||
bool privateClassMethods = false;
|
||||
|
||||
// True if transcoding to XDR should use Stencil instead of JSScripts.
|
||||
bool useStencilXDR = false;
|
||||
|
||||
// True if off-thread parsing should use a parse GlobalObject in order to
|
||||
// directly allocate to the GC from a helper thread. If false, transfer the
|
||||
// CompilationStencil back to main thread before allocating GC objects.
|
||||
|
@ -3461,6 +3461,7 @@ void JS::TransitiveCompileOptions::copyPODTransitiveOptions(
|
||||
nonSyntacticScope = rhs.nonSyntacticScope;
|
||||
privateClassFields = rhs.privateClassFields;
|
||||
privateClassMethods = rhs.privateClassMethods;
|
||||
useStencilXDR = rhs.useStencilXDR;
|
||||
useOffThreadParseGlobal = rhs.useOffThreadParseGlobal;
|
||||
};
|
||||
|
||||
@ -3555,6 +3556,8 @@ JS::CompileOptions::CompileOptions(JSContext* cx)
|
||||
cx->options().throwOnAsmJSValidationFailure();
|
||||
privateClassFields = cx->options().privateClassFields();
|
||||
privateClassMethods = cx->options().privateClassMethods();
|
||||
|
||||
useStencilXDR = !UseOffThreadParseGlobal();
|
||||
useOffThreadParseGlobal = UseOffThreadParseGlobal();
|
||||
|
||||
sourcePragmas_ = cx->options().sourcePragmas();
|
||||
@ -5752,8 +5755,7 @@ JS_PUBLIC_API JS::TranscodeResult JS::DecodeScriptMaybeStencil(
|
||||
JSContext* cx, const ReadOnlyCompileOptions& options,
|
||||
TranscodeBuffer& buffer, JS::MutableHandleScript scriptp,
|
||||
size_t cursorIndex) {
|
||||
bool useStencilXDR = !options.useOffThreadParseGlobal;
|
||||
if (!useStencilXDR) {
|
||||
if (!options.useStencilXDR) {
|
||||
// The buffer contains JSScript.
|
||||
return JS::DecodeScript(cx, options, buffer, scriptp, cursorIndex);
|
||||
}
|
||||
@ -5802,8 +5804,7 @@ JS_PUBLIC_API JS::TranscodeResult JS::DecodeScriptAndStartIncrementalEncoding(
|
||||
JSContext* cx, const ReadOnlyCompileOptions& options,
|
||||
TranscodeBuffer& buffer, JS::MutableHandleScript scriptp,
|
||||
size_t cursorIndex) {
|
||||
bool useStencilXDR = !options.useOffThreadParseGlobal;
|
||||
if (!useStencilXDR) {
|
||||
if (!options.useStencilXDR) {
|
||||
JS::TranscodeResult res =
|
||||
JS::DecodeScript(cx, options, buffer, scriptp, cursorIndex);
|
||||
if (res != JS::TranscodeResult_Ok) {
|
||||
|
@ -2440,10 +2440,10 @@ static bool Evaluate(JSContext* cx, unsigned argc, Value* vp) {
|
||||
if (!FinishIncrementalEncoding(cx, script, saveBuffer)) {
|
||||
return false;
|
||||
}
|
||||
if (js::UseOffThreadParseGlobal()) {
|
||||
saveCacheKind = BytecodeCacheKind::Script;
|
||||
} else {
|
||||
if (options.useStencilXDR) {
|
||||
saveCacheKind = BytecodeCacheKind::Stencil;
|
||||
} else {
|
||||
saveCacheKind = BytecodeCacheKind::Script;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -5917,6 +5917,8 @@ static bool OffThreadDecodeScript(JSContext* cx, unsigned argc, Value* vp) {
|
||||
// for saveBytecode, or stencil for saveIncrementalBytecode.
|
||||
options.useOffThreadParseGlobal =
|
||||
CacheEntry_getKind(cx, cacheEntry) == BytecodeCacheKind::Script;
|
||||
options.useStencilXDR =
|
||||
CacheEntry_getKind(cx, cacheEntry) == BytecodeCacheKind::Stencil;
|
||||
|
||||
if (args.length() >= 2) {
|
||||
if (args[1].isPrimitive()) {
|
||||
|
@ -112,8 +112,7 @@ static JSScript* CompileSourceBufferAndStartIncrementalEncoding(
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
bool useStencilXDR = !options.useOffThreadParseGlobal;
|
||||
if (useStencilXDR) {
|
||||
if (options.useStencilXDR) {
|
||||
UniquePtr<XDRIncrementalEncoderBase> xdrEncoder;
|
||||
|
||||
if (!compilationInfo.get().input.source()->xdrEncodeInitialStencil(
|
||||
|
@ -778,8 +778,7 @@ void ScriptDecodeTask::parse(JSContext* cx) {
|
||||
RootedScript resultScript(cx);
|
||||
Rooted<ScriptSourceObject*> sourceObject(cx);
|
||||
|
||||
bool useStencilXDR = !options.useOffThreadParseGlobal;
|
||||
if (useStencilXDR) {
|
||||
if (options.useStencilXDR) {
|
||||
// The buffer contains stencil.
|
||||
Rooted<UniquePtr<frontend::CompilationInfoVector>> compilationInfos(
|
||||
cx, js_new<frontend::CompilationInfoVector>(cx, options));
|
||||
@ -1218,6 +1217,9 @@ bool js::StartOffThreadDecodeScript(JSContext* cx,
|
||||
return false;
|
||||
}
|
||||
|
||||
// XDR data must be Stencil format, or a parse-global must be available.
|
||||
MOZ_RELEASE_ASSERT(options.useStencilXDR || options.useOffThreadParseGlobal);
|
||||
|
||||
return StartOffThreadParseTask(cx, std::move(task), options);
|
||||
}
|
||||
|
||||
@ -1237,6 +1239,7 @@ bool js::StartOffThreadDecodeMultiScripts(JSContext* cx,
|
||||
// they must continue to use the off-thread-parse-global in order to
|
||||
// decode.
|
||||
CompileOptions optionsCopy(cx, options);
|
||||
optionsCopy.useStencilXDR = false;
|
||||
optionsCopy.useOffThreadParseGlobal = true;
|
||||
|
||||
return StartOffThreadParseTask(cx, std::move(task), optionsCopy);
|
||||
@ -2114,8 +2117,7 @@ JSScript* GlobalHelperThreadState::finishSingleParseTask(
|
||||
|
||||
// Start the incremental-XDR encoder.
|
||||
if (startEncoding == StartEncoding::Yes) {
|
||||
bool useStencilXDR = !parseTask->options.useOffThreadParseGlobal;
|
||||
if (useStencilXDR) {
|
||||
if (parseTask->options.useStencilXDR) {
|
||||
UniquePtr<XDRIncrementalEncoderBase> xdrEncoder;
|
||||
|
||||
if (parseTask->compilationInfo_.get()) {
|
||||
|
@ -1609,6 +1609,8 @@ bool DelazifyCanonicalScriptedFunctionImpl(JSContext* cx, HandleFunction fun,
|
||||
}
|
||||
|
||||
if (ss->hasEncoder()) {
|
||||
// NOTE: Currently we rely on the UseOffThreadParseGlobal to decide which
|
||||
// format to use for incremental encoding.
|
||||
bool useStencilXDR = !js::UseOffThreadParseGlobal();
|
||||
if (useStencilXDR) {
|
||||
if (!ss->xdrEncodeFunctionStencil(cx, compilationInfo.get().stencil)) {
|
||||
|
Loading…
Reference in New Issue
Block a user