diff --git a/build/patches/Partitioning-Blink-memory-cache.patch b/build/patches/Partitioning-Blink-memory-cache.patch new file mode 100644 index 00000000..d5c697cf --- /dev/null +++ b/build/patches/Partitioning-Blink-memory-cache.patch @@ -0,0 +1,194 @@ +From: uazo +Date: Wed, 6 Jul 2022 10:15:20 +0000 +Subject: Partitioning Blink memory cache + +--- + .../core/html/parser/html_srcset_parser.cc | 2 +- + .../core/inspector/inspector_network_agent.cc | 2 +- + .../core/inspector/inspector_page_agent.cc | 5 +++-- + .../renderer/core/loader/image_loader.cc | 3 ++- + .../platform/loader/fetch/memory_cache.cc | 7 ++----- + .../platform/loader/fetch/memory_cache.h | 4 ++-- + .../platform/loader/fetch/resource_fetcher.cc | 21 ++++++++++++------- + .../platform/loader/fetch/resource_fetcher.h | 3 ++- + 8 files changed, 27 insertions(+), 20 deletions(-) + +diff --git a/third_party/blink/renderer/core/html/parser/html_srcset_parser.cc b/third_party/blink/renderer/core/html/parser/html_srcset_parser.cc +--- a/third_party/blink/renderer/core/html/parser/html_srcset_parser.cc ++++ b/third_party/blink/renderer/core/html/parser/html_srcset_parser.cc +@@ -413,7 +413,7 @@ static unsigned AvoidDownloadIfHigherDensityResourceIsInCache( + KURL url = document->CompleteURL( + StripLeadingAndTrailingHTMLSpaces(image_candidates[i]->Url())); + if (GetMemoryCache()->ResourceForURL( +- url, document->Fetcher()->GetCacheIdentifier(url)) || ++ url, document->Fetcher()->GetCacheIdentifier(url, document->TopFrameOrigin())) || + url.ProtocolIsData()) + return i; + } +diff --git a/third_party/blink/renderer/core/inspector/inspector_network_agent.cc b/third_party/blink/renderer/core/inspector/inspector_network_agent.cc +--- a/third_party/blink/renderer/core/inspector/inspector_network_agent.cc ++++ b/third_party/blink/renderer/core/inspector/inspector_network_agent.cc +@@ -2208,7 +2208,7 @@ bool InspectorNetworkAgent::FetchResourceContent(Document* document, + Resource* cached_resource = document->Fetcher()->CachedResource(url); + if (!cached_resource) { + cached_resource = GetMemoryCache()->ResourceForURL( +- url, document->Fetcher()->GetCacheIdentifier(url)); ++ url, document->Fetcher()->GetCacheIdentifier(url, document->TopFrameOrigin())); + } + if (cached_resource && InspectorPageAgent::CachedResourceContent( + cached_resource, content, base64_encoded)) +diff --git a/third_party/blink/renderer/core/inspector/inspector_page_agent.cc b/third_party/blink/renderer/core/inspector/inspector_page_agent.cc +--- a/third_party/blink/renderer/core/inspector/inspector_page_agent.cc ++++ b/third_party/blink/renderer/core/inspector/inspector_page_agent.cc +@@ -166,9 +166,10 @@ Resource* CachedResource(LocalFrame* frame, + if (!document) + return nullptr; + Resource* cached_resource = document->Fetcher()->CachedResource(url); +- if (!cached_resource) { ++ if (!cached_resource && document->TopFrameOrigin()) { + cached_resource = GetMemoryCache()->ResourceForURL( +- url, document->Fetcher()->GetCacheIdentifier(url)); ++ url, document->Fetcher()->GetCacheIdentifier(url, ++ document->TopFrameOrigin())); + } + if (!cached_resource) + cached_resource = loader->ResourceForURL(url); +diff --git a/third_party/blink/renderer/core/loader/image_loader.cc b/third_party/blink/renderer/core/loader/image_loader.cc +--- a/third_party/blink/renderer/core/loader/image_loader.cc ++++ b/third_party/blink/renderer/core/loader/image_loader.cc +@@ -714,7 +714,8 @@ bool ImageLoader::ShouldLoadImmediately(const KURL& url) const { + // content when style recalc is over and DOM mutation is allowed again. + if (!url.IsNull()) { + Resource* resource = GetMemoryCache()->ResourceForURL( +- url, element_->GetDocument().Fetcher()->GetCacheIdentifier(url)); ++ url, element_->GetDocument().Fetcher()->GetCacheIdentifier(url, ++ element_->GetDocument().TopFrameOrigin())); + + if (resource && !resource->ErrorOccurred() && + CanReuseFromListOfAvailableImages( +diff --git a/third_party/blink/renderer/platform/loader/fetch/memory_cache.cc b/third_party/blink/renderer/platform/loader/fetch/memory_cache.cc +--- a/third_party/blink/renderer/platform/loader/fetch/memory_cache.cc ++++ b/third_party/blink/renderer/platform/loader/fetch/memory_cache.cc +@@ -196,7 +196,7 @@ void MemoryCache::RemoveInternal(ResourceMap* resource_map, + } + + bool MemoryCache::Contains(const Resource* resource) const { +- if (!resource || resource->Url().IsEmpty()) ++ if (!resource || resource->Url().IsEmpty() || resource->CacheIdentifier().IsEmpty()) + return false; + + const auto resource_maps_it = +@@ -212,12 +212,9 @@ bool MemoryCache::Contains(const Resource* resource) const { + return resource == resources_it->value->GetResource(); + } + +-Resource* MemoryCache::ResourceForURL(const KURL& resource_url) const { +- return ResourceForURL(resource_url, DefaultCacheIdentifier()); +-} +- + Resource* MemoryCache::ResourceForURL(const KURL& resource_url, + const String& cache_identifier) const { ++ if (cache_identifier.IsEmpty()) return nullptr; + DCHECK(WTF::IsMainThread()); + if (!resource_url.IsValid() || resource_url.IsNull()) + return nullptr; +diff --git a/third_party/blink/renderer/platform/loader/fetch/memory_cache.h b/third_party/blink/renderer/platform/loader/fetch/memory_cache.h +--- a/third_party/blink/renderer/platform/loader/fetch/memory_cache.h ++++ b/third_party/blink/renderer/platform/loader/fetch/memory_cache.h +@@ -112,9 +112,7 @@ class PLATFORM_EXPORT MemoryCache final : public GarbageCollected, + TypeStatistic other; + }; + +- Resource* ResourceForURL(const KURL&) const; + Resource* ResourceForURL(const KURL&, const String& cache_identifier) const; +- HeapVector> ResourcesForURL(const KURL&) const; + + void Add(Resource*); + void Remove(Resource*); +@@ -159,6 +157,8 @@ class PLATFORM_EXPORT MemoryCache final : public GarbageCollected, + base::MemoryPressureListener::MemoryPressureLevel) override; + + private: ++ HeapVector> ResourcesForURL(const KURL&) const; ++ + enum PruneStrategy { + // Automatically decide how much to prune. + kAutomaticPrune, +diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc +--- a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc ++++ b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc +@@ -640,7 +640,8 @@ Resource* ResourceFetcher::CreateResourceForStaticData( + if (!archive_ && factory.GetType() == ResourceType::kRaw) + return nullptr; + +- const String cache_identifier = GetCacheIdentifier(url); ++ const String cache_identifier = GetCacheIdentifier(url, ++ params.GetResourceRequest().TopFrameOrigin()); + // Most off-main-thread resource fetches use Resource::kRaw and don't reach + // this point, but off-main-thread module fetches might. + if (IsMainThread()) { +@@ -1083,7 +1084,9 @@ Resource* ResourceFetcher::RequestResource(FetchParameters& params, + resource = nullptr; + } else { + resource = GetMemoryCache()->ResourceForURL( +- params.Url(), GetCacheIdentifier(params.Url())); ++ params.Url(), ++ GetCacheIdentifier(params.Url(), ++ params.GetResourceRequest().TopFrameOrigin())); + } + if (resource) { + policy = DetermineRevalidationPolicy(resource_type, params, *resource, +@@ -1291,7 +1294,8 @@ Resource* ResourceFetcher::CreateResourceForLoading( + const FetchParameters& params, + const ResourceFactory& factory) { + const String cache_identifier = +- GetCacheIdentifier(params.GetResourceRequest().Url()); ++ GetCacheIdentifier(params.GetResourceRequest().Url(), ++ params.GetResourceRequest().TopFrameOrigin()); + if (!base::FeatureList::IsEnabled( + blink::features::kScopeMemoryCachePerContext)) { + DCHECK(!IsMainThread() || params.IsStaleRevalidation() || +@@ -2185,13 +2189,16 @@ void ResourceFetcher::UpdateAllImageResourcePriorities() { + to_be_removed.clear(); + } + +-String ResourceFetcher::GetCacheIdentifier(const KURL& url) const { ++String ResourceFetcher::GetCacheIdentifier(const KURL& url, ++ scoped_refptr origin) const { ++ String origin_url = origin ? origin->ToRawString() : ""; ++ + if (properties_->GetControllerServiceWorkerMode() != + mojom::ControllerServiceWorkerMode::kNoController) { +- return String::Number(properties_->ServiceWorkerId()); ++ return origin_url + "_" + String::Number(properties_->ServiceWorkerId()); + } + if (properties_->WebBundlePhysicalUrl().IsValid()) +- return properties_->WebBundlePhysicalUrl().GetString(); ++ return origin_url + "_" + properties_->WebBundlePhysicalUrl().GetString(); + + // Requests that can be satisfied via `archive_` (i.e. MHTML) or + // `subresource_web_bundles_` should not participate in the global caching, +@@ -2206,7 +2213,7 @@ String ResourceFetcher::GetCacheIdentifier(const KURL& url) const { + return bundle->GetCacheIdentifier(); + } + +- return MemoryCache::DefaultCacheIdentifier(); ++ return origin_url; + } + + void ResourceFetcher::EmulateLoadStartedForInspector( +diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h +--- a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h ++++ b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h +@@ -248,7 +248,8 @@ class PLATFORM_EXPORT ResourceFetcher + uint32_t inflight_keepalive_bytes); + blink::mojom::ControllerServiceWorkerMode IsControlledByServiceWorker() const; + +- String GetCacheIdentifier(const KURL& url) const; ++ String GetCacheIdentifier(const KURL& url, ++ scoped_refptr cache_identifier) const; + + enum IsImageSet { kImageNotImageSet, kImageIsImageSet }; + +-- +2.25.1