Bug 1916635 - Part 1: Create PerformanceResourceTiming entry for SharedScriptCache. r=bthrall

Differential Revision: https://phabricator.services.mozilla.com/D223357
This commit is contained in:
Tooru Fujisawa
2024-10-01 12:17:26 +00:00
parent 2081de56bb
commit 84727f2cc6
5 changed files with 38 additions and 10 deletions

View File

@@ -21,6 +21,7 @@
#include "mozilla/NotNull.h"
#include "mozilla/PerfStats.h"
#include "mozilla/ScopeExit.h"
#include "mozilla/SharedSubResourceCache.h"
#include "mozilla/StaticPrefs_dom.h"
#include "mozilla/Utf8.h"
#include "mozilla/Vector.h"
@@ -373,6 +374,9 @@ ScriptLoadHandler::OnStreamComplete(nsIIncrementalStreamLoader* aLoader,
nsCOMPtr<nsIRequest> channelRequest;
aLoader->GetRequest(getter_AddRefs(channelRequest));
mRequest->mNetworkMetadata =
new SubResourceNetworkMetadataHolder(channelRequest);
{
nsCOMPtr<nsIChannel> channel = do_QueryInterface(channelRequest);
channel->SetNotificationCallbacks(nullptr);

View File

@@ -854,6 +854,18 @@ void ScriptLoader::PrepareRequestPriorityAndRequestDependencies(
}
}
inline nsLiteralString GetInitiatorType(ScriptLoadRequest* aRequest) {
if (aRequest->mEarlyHintPreloaderId) {
return u"early-hints"_ns;
}
if (aRequest->GetScriptLoadContext()->IsLinkPreloadScript()) {
return u"link"_ns;
}
return u"script"_ns;
}
// static
nsresult ScriptLoader::PrepareHttpRequestAndInitiatorType(
nsIChannel* aChannel, ScriptLoadRequest* aRequest,
@@ -895,13 +907,7 @@ nsresult ScriptLoader::PrepareHttpRequestAndInitiatorType(
// Set the initiator type
nsCOMPtr<nsITimedChannel> timedChannel(do_QueryInterface(httpChannel));
if (timedChannel) {
if (aRequest->mEarlyHintPreloaderId) {
timedChannel->SetInitiatorType(u"early-hints"_ns);
} else if (aRequest->GetScriptLoadContext()->IsLinkPreloadScript()) {
timedChannel->SetInitiatorType(u"link"_ns);
} else {
timedChannel->SetInitiatorType(u"script"_ns);
}
timedChannel->SetInitiatorType(GetInitiatorType(aRequest));
}
return rv;
@@ -1114,6 +1120,19 @@ already_AddRefed<ScriptLoadRequest> ScriptLoader::CreateLoadRequest(
CORSModeToSecurityFlags(aCORSMode),
nsIContentPolicy::TYPE_INTERNAL_SCRIPT);
{
nsAutoCString name;
nsString entryName;
aURI->GetSpec(name);
CopyUTF8toUTF16(name, entryName);
auto now = TimeStamp::Now();
SharedSubResourceCacheUtils::AddPerformanceEntryForCache(
entryName, GetInitiatorType(aRequest),
cacheResult.mNetworkMetadata, now, now, mDocument);
}
aRequest->CacheEntryFound(cacheResult.mCompleteValue);
return aRequest.forget();
}

View File

@@ -90,7 +90,8 @@ ScriptLoadData::ScriptLoadData(ScriptLoader* aLoader,
: mExpirationTime(aRequest->ExpirationTime()),
mLoader(aLoader),
mKey(aLoader, aRequest),
mLoadedScript(aRequest->getLoadedScript()) {}
mLoadedScript(aRequest->getLoadedScript()),
mNetworkMetadata(aRequest->mNetworkMetadata) {}
NS_IMPL_ISUPPORTS(SharedScriptCache, nsIMemoryReporter, nsIObserver)

View File

@@ -11,6 +11,7 @@
#include "js/loader/LoadedScript.h" // JS::loader::LoadedScript
#include "js/loader/ScriptKind.h" // JS::loader::ScriptKind
#include "js/loader/ScriptLoadRequest.h" // JS::loader::ScriptLoadRequest
#include "mozilla/RefPtr.h" // RefPtr
#include "mozilla/WeakPtr.h" // SupportsWeakPtr
#include "mozilla/CORSMode.h" // mozilla::CORSMode
#include "mozilla/MemoryReporting.h" // MallocSizeOf
@@ -135,8 +136,7 @@ class ScriptLoadData final
bool IsSyncLoad() const override { return true; }
SubResourceNetworkMetadataHolder* GetNetworkMetadata() const override {
// TODO: Bug 1916635.
return nullptr;
return mNetworkMetadata.get();
}
void StartLoading() override {}
@@ -163,6 +163,7 @@ class ScriptLoadData final
ScriptLoader* mLoader;
ScriptHashKey mKey;
RefPtr<JS::loader::LoadedScript> mLoadedScript;
RefPtr<SubResourceNetworkMetadataHolder> mNetworkMetadata;
};
struct SharedScriptCacheTraits {

View File

@@ -18,6 +18,8 @@
#include "mozilla/LinkedList.h"
#include "mozilla/Maybe.h"
#include "mozilla/PreloaderBase.h"
#include "mozilla/RefPtr.h"
#include "mozilla/SharedSubResourceCache.h" // mozilla::SubResourceNetworkMetadataHolder
#include "mozilla/StaticPrefs_dom.h"
#include "mozilla/Variant.h"
#include "mozilla/Vector.h"
@@ -281,6 +283,7 @@ class ScriptLoadRequest : public nsISupports,
CacheExpirationTime mExpirationTime = CacheExpirationTime::Never();
RefPtr<ScriptFetchOptions> mFetchOptions;
RefPtr<mozilla::SubResourceNetworkMetadataHolder> mNetworkMetadata;
const SRIMetadata mIntegrity;
const nsCOMPtr<nsIURI> mReferrer;
mozilla::Maybe<nsString>