commit b096c129a4a78302dbfb83d4a3a3f43c14deca2c
parent ca6e20dc42a8193f407adb8c57c2ac2b1b3a2d82
Author: Tooru Fujisawa <arai_a@mac.com>
Date: Tue, 9 Dec 2025 05:11:36 +0000
Bug 2002960 - Part 1: Eagerly reflect the necko fetch count to LoadedScript. r=nbp
Differential Revision: https://phabricator.services.mozilla.com/D274746
Diffstat:
3 files changed, 26 insertions(+), 44 deletions(-)
diff --git a/dom/base/test/browser_script_loader_js_cache_sri_after_save.js b/dom/base/test/browser_script_loader_js_cache_sri_after_save.js
@@ -199,6 +199,11 @@ add_task(async function testMemoryCache_SRIAfterSave() {
ev("load:diskcache", "file_js_cache_large.js"),
ev("load:fallback", "file_js_cache_large.js"),
ev("load:source", "file_js_cache_large.js"),
+ // At this point, the necko's fetch count is 3,
+ // because of the following:
+ // * 0-th item's source load
+ // * this items's diskcache load
+ // * this items's source load
ev("memorycache:saved", "file_js_cache_large.js"),
ev("evaluate:classic", "file_js_cache_large.js"),
ev("diskcache:noschedule"),
@@ -210,7 +215,8 @@ add_task(async function testMemoryCache_SRIAfterSave() {
events: [
ev("load:memorycache", "file_js_cache_large.js"),
ev("evaluate:classic", "file_js_cache_large.js"),
- ev("diskcache:noschedule"),
+ // Loading again should save it.
+ ev("diskcache:saved", "file_js_cache_large.js", false),
],
},
],
@@ -260,6 +266,7 @@ add_task(async function testMemoryCache_SRIAfterSave() {
ev("load:diskcache", "file_js_cache_large.js"),
ev("load:fallback", "file_js_cache_large.js"),
ev("load:source", "file_js_cache_large.js"),
+ // At this point, the necko's fetch count is 3.
ev("memorycache:saved", "file_js_cache_large.js"),
ev("evaluate:module", "file_js_cache_large.js"),
ev("diskcache:noschedule"),
@@ -271,7 +278,7 @@ add_task(async function testMemoryCache_SRIAfterSave() {
events: [
ev("load:memorycache", "file_js_cache_large.js"),
ev("evaluate:module", "file_js_cache_large.js"),
- ev("diskcache:noschedule"),
+ ev("diskcache:saved", "file_js_cache_large.js", false),
],
},
],
diff --git a/dom/base/test/browser_script_loader_js_cache_sri_different.js b/dom/base/test/browser_script_loader_js_cache_sri_different.js
@@ -211,28 +211,13 @@ add_task(async function testMemoryCache_DifferentSRI() {
ev("load:diskcache", "file_js_cache_large.js"),
ev("load:fallback", "file_js_cache_large.js"),
ev("load:source", "file_js_cache_large.js"),
+ // At this point, the necko's fetch count is 3,
+ // because of the following:
+ // * 0-th item's source load
+ // * this items's diskcache load
+ // * this items's source load
ev("memorycache:saved", "file_js_cache_large.js"),
ev("evaluate:classic", "file_js_cache_large.js"),
- // Disk cache's fetch count is not incremented for non-first
- // load, and the fetch count here doesn't hit the minimum.
- ev("diskcache:noschedule"),
- ],
- },
- {
- file: "file_js_cache_large.js",
- sri: "sha512-NN5Pp0blZjckIohQdMbZwclYHNV3QXnL/UiR1R0h66KMc2zRCgfFQ56zpTd8UCYB/RkAQ6HUbPzlGr8JWUp6AQ==",
- events: [
- ev("load:memorycache", "file_js_cache_large.js"),
- ev("evaluate:classic", "file_js_cache_large.js"),
- ev("diskcache:noschedule"),
- ],
- },
- {
- file: "file_js_cache_large.js",
- sri: "sha512-NN5Pp0blZjckIohQdMbZwclYHNV3QXnL/UiR1R0h66KMc2zRCgfFQ56zpTd8UCYB/RkAQ6HUbPzlGr8JWUp6AQ==",
- events: [
- ev("load:memorycache", "file_js_cache_large.js"),
- ev("evaluate:classic", "file_js_cache_large.js"),
ev("diskcache:noschedule"),
],
},
@@ -296,6 +281,7 @@ add_task(async function testMemoryCache_DifferentSRI() {
ev("load:diskcache", "file_js_cache_large.js"),
ev("load:fallback", "file_js_cache_large.js"),
ev("load:source", "file_js_cache_large.js"),
+ // At this point, the necko's fetch count is 3.
ev("memorycache:saved", "file_js_cache_large.js"),
ev("evaluate:module", "file_js_cache_large.js"),
ev("diskcache:noschedule"),
@@ -307,7 +293,7 @@ add_task(async function testMemoryCache_DifferentSRI() {
events: [
ev("load:memorycache", "file_js_cache_large.js"),
ev("evaluate:module", "file_js_cache_large.js"),
- ev("diskcache:noschedule"),
+ ev("diskcache:saved", "file_js_cache_large.js", false),
],
},
],
diff --git a/dom/script/ScriptLoader.cpp b/dom/script/ScriptLoader.cpp
@@ -2872,27 +2872,7 @@ void ScriptLoader::CalculateCacheFlag(ScriptLoadRequest* aRequest) {
// disk cache optimization, such that we do not waste time on entry which
// are going to be dropped soon.
if (strategy.mHasFetchCountMin) {
- uint32_t fetchCount = 0;
- if (aRequest->IsCachedStencil()) {
- fetchCount = aRequest->mLoadedScript->mFetchCount;
- } else {
- if (NS_FAILED(
- aRequest->getLoadedScript()->mCacheInfo->GetCacheTokenFetchCount(
- &fetchCount))) {
- LOG(
- ("ScriptLoadRequest (%p): Bytecode-cache: Skip disk: Cannot get "
- "fetchCount.",
- aRequest));
- aRequest->MarkSkippedDiskCaching();
- aRequest->getLoadedScript()->DropDiskCacheReferenceAndSRI();
- return;
- }
- if (fetchCount < UINT8_MAX) {
- aRequest->mLoadedScript->mFetchCount = fetchCount;
- } else {
- aRequest->mLoadedScript->mFetchCount = UINT8_MAX;
- }
- }
+ uint8_t fetchCount = aRequest->mLoadedScript->mFetchCount;
LOG(("ScriptLoadRequest (%p): Bytecode-cache: fetchCount = %d.", aRequest,
fetchCount));
if (fetchCount < strategy.mFetchCountMin) {
@@ -4136,6 +4116,15 @@ nsresult ScriptLoader::OnStreamComplete(
// save the this script in the disk cache.
if (aRequest->IsTextSource() &&
StaticPrefs::dom_script_loader_bytecode_cache_enabled()) {
+ uint32_t fetchCount;
+ if (NS_SUCCEEDED(cacheInfo->GetCacheTokenFetchCount(&fetchCount))) {
+ if (fetchCount < UINT8_MAX) {
+ aRequest->getLoadedScript()->mFetchCount = fetchCount;
+ } else {
+ aRequest->getLoadedScript()->mFetchCount = UINT8_MAX;
+ }
+ }
+
aRequest->getLoadedScript()->mCacheInfo = cacheInfo;
LOG(("ScriptLoadRequest (%p): nsICacheInfoChannel = %p", aRequest,
aRequest->getLoadedScript()->mCacheInfo.get()));