Bug 1436400 - Part 10: Support bytecode cache for module script. r=nbp

Differential Revision: https://phabricator.services.mozilla.com/D140297
This commit is contained in:
Tooru Fujisawa
2022-03-15 19:05:57 +00:00
parent 269bab5cb4
commit 1d53179c23
7 changed files with 117 additions and 98 deletions

View File

@@ -593,10 +593,7 @@ nsresult ScriptLoader::StartLoadInternal(ScriptLoadRequest* aRequest,
// constant.
aRequest->mCacheInfo = nullptr;
nsCOMPtr<nsICacheInfoChannel> cic(do_QueryInterface(channel));
if (cic && StaticPrefs::dom_script_loader_bytecode_cache_enabled() &&
// Bug 1436400: no bytecode cache support for modules yet.
// TODO: Remove this also to enable bytecode encoding.
!aRequest->IsModuleRequest()) {
if (cic && StaticPrefs::dom_script_loader_bytecode_cache_enabled()) {
MOZ_ASSERT(!aRequest->GetLoadContext()->GetWebExtGlobal(),
"Can not bytecode cache WebExt code");
if (!aRequest->IsLoadingSource()) {
@@ -1530,7 +1527,15 @@ nsresult ScriptLoader::AttemptAsyncScriptCompile(ScriptLoadRequest* aRequest,
auto signalOOM = mozilla::MakeScopeExit(
[&aRequest]() { aRequest->GetLoadContext()->mRunnable = nullptr; });
if (aRequest->IsModuleRequest()) {
if (aRequest->IsBytecode()) {
JS::DecodeOptions decodeOptions(options);
aRequest->GetLoadContext()->mOffThreadToken = JS::DecodeStencilOffThread(
cx, decodeOptions, aRequest->mScriptBytecode, aRequest->mBytecodeOffset,
OffThreadScriptLoaderCallback, static_cast<void*>(runnable));
if (!aRequest->GetLoadContext()->mOffThreadToken) {
return NS_ERROR_OUT_OF_MEMORY;
}
} else if (aRequest->IsModuleRequest()) {
MOZ_ASSERT(aRequest->IsTextSource());
MaybeSourceText maybeSource;
nsresult rv = aRequest->GetScriptSource(cx, &maybeSource);
@@ -1547,14 +1552,6 @@ nsresult ScriptLoader::AttemptAsyncScriptCompile(ScriptLoadRequest* aRequest,
if (!aRequest->GetLoadContext()->mOffThreadToken) {
return NS_ERROR_OUT_OF_MEMORY;
}
} else if (aRequest->IsBytecode()) {
JS::DecodeOptions decodeOptions(options);
aRequest->GetLoadContext()->mOffThreadToken = JS::DecodeStencilOffThread(
cx, decodeOptions, aRequest->mScriptBytecode, aRequest->mBytecodeOffset,
OffThreadScriptLoaderCallback, static_cast<void*>(runnable));
if (!aRequest->GetLoadContext()->mOffThreadToken) {
return NS_ERROR_OUT_OF_MEMORY;
}
} else {
MOZ_ASSERT(aRequest->IsTextSource());
@@ -3251,7 +3248,6 @@ nsresult ScriptLoader::PrepareLoadedRequest(ScriptLoadRequest* aRequest,
}
if (aRequest->IsModuleRequest()) {
MOZ_ASSERT(aRequest->IsSource());
ModuleLoadRequest* request = aRequest->AsModuleRequest();
// When loading a module, only responses with a JavaScript MIME type are