diff options
Diffstat (limited to 'chromium/third_party/blink/renderer/core/loader/frame_resource_fetcher_properties.cc')
-rw-r--r-- | chromium/third_party/blink/renderer/core/loader/frame_resource_fetcher_properties.cc | 79 |
1 files changed, 54 insertions, 25 deletions
diff --git a/chromium/third_party/blink/renderer/core/loader/frame_resource_fetcher_properties.cc b/chromium/third_party/blink/renderer/core/loader/frame_resource_fetcher_properties.cc index 12c1fb1da2b..75dca1637b0 100644 --- a/chromium/third_party/blink/renderer/core/loader/frame_resource_fetcher_properties.cc +++ b/chromium/third_party/blink/renderer/core/loader/frame_resource_fetcher_properties.cc @@ -4,13 +4,14 @@ #include "third_party/blink/renderer/core/loader/frame_resource_fetcher_properties.h" +#include "base/metrics/field_trial_params.h" #include "third_party/blink/public/platform/modules/service_worker/web_service_worker_network_provider.h" #include "third_party/blink/public/platform/web_effective_connection_type.h" #include "third_party/blink/renderer/core/dom/document.h" +#include "third_party/blink/renderer/core/frame/local_dom_window.h" #include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/core/frame/settings.h" #include "third_party/blink/renderer/core/loader/document_loader.h" -#include "third_party/blink/renderer/core/loader/frame_or_imported_document.h" #include "third_party/blink/renderer/core/page/page.h" #include "third_party/blink/renderer/core/script/fetch_client_settings_object_impl.h" #include "third_party/blink/renderer/platform/loader/fetch/fetch_client_settings_object.h" @@ -19,31 +20,50 @@ namespace blink { +namespace { + +// Feature for throttling field trial. +const base::Feature kResourceLoadThrottlingTrial{ + "ResourceLoadScheduler", base::FEATURE_DISABLED_BY_DEFAULT}; + +// Field trial parameters. +// Note: bg_limit is supported on m61+, but bg_sub_limit is only on m63+. +// If bg_sub_limit param is not found, we should use bg_limit to make the +// study result statistically correct. +constexpr base::FeatureParam<int> kOutstandingLimitForBackgroundMainFrame{ + &kResourceLoadThrottlingTrial, "bg_limit", 3}; +constexpr base::FeatureParam<int> kOutstandingLimitForBackgroundSubFrame{ + &kResourceLoadThrottlingTrial, "bg_sub_limit", 2}; + +} // namespace + FrameResourceFetcherProperties::FrameResourceFetcherProperties( - FrameOrImportedDocument& frame_or_imported_document) - : frame_or_imported_document_(frame_or_imported_document), + DocumentLoader& document_loader, + Document& document) + : document_loader_(document_loader), + document_(document), fetch_client_settings_object_( MakeGarbageCollected<FetchClientSettingsObjectImpl>( - *frame_or_imported_document.GetDocument().ToExecutionContext())), - web_bundle_physical_url_( - frame_or_imported_document_->GetMasterDocumentLoader() - .WebBundlePhysicalUrl()) {} + *document.domWindow())), + web_bundle_physical_url_(document_loader.WebBundlePhysicalUrl()) {} void FrameResourceFetcherProperties::Trace(Visitor* visitor) { - visitor->Trace(frame_or_imported_document_); + visitor->Trace(document_loader_); + visitor->Trace(document_); visitor->Trace(fetch_client_settings_object_); ResourceFetcherProperties::Trace(visitor); } bool FrameResourceFetcherProperties::IsMainFrame() const { - return frame_or_imported_document_->GetFrame().IsMainFrame(); + LocalFrame* frame = document_->GetFrame(); + DCHECK(frame); + return frame->IsMainFrame(); } mojom::ControllerServiceWorkerMode FrameResourceFetcherProperties::GetControllerServiceWorkerMode() const { auto* service_worker_network_provider = - frame_or_imported_document_->GetMasterDocumentLoader() - .GetServiceWorkerNetworkProvider(); + document_loader_->GetServiceWorkerNetworkProvider(); if (!service_worker_network_provider) return blink::mojom::ControllerServiceWorkerMode::kNoController; return service_worker_network_provider->GetControllerServiceWorkerMode(); @@ -53,32 +73,31 @@ int64_t FrameResourceFetcherProperties::ServiceWorkerId() const { DCHECK_NE(GetControllerServiceWorkerMode(), blink::mojom::ControllerServiceWorkerMode::kNoController); auto* service_worker_network_provider = - frame_or_imported_document_->GetMasterDocumentLoader() - .GetServiceWorkerNetworkProvider(); + document_loader_->GetServiceWorkerNetworkProvider(); DCHECK(service_worker_network_provider); return service_worker_network_provider->ControllerServiceWorkerID(); } bool FrameResourceFetcherProperties::IsPaused() const { - return frame_or_imported_document_->GetFrame().GetPage()->Paused(); + LocalFrame* frame = document_->GetFrame(); + DCHECK(frame); + return frame->GetPage()->Paused(); } bool FrameResourceFetcherProperties::IsLoadComplete() const { - return frame_or_imported_document_->GetDocument().LoadEventFinished(); + return document_->LoadEventFinished(); } bool FrameResourceFetcherProperties::ShouldBlockLoadingSubResource() const { - DocumentLoader* document_loader = - frame_or_imported_document_->GetDocumentLoader(); - if (!document_loader) - return false; - - FrameLoader& loader = frame_or_imported_document_->GetFrame().Loader(); - return document_loader != loader.GetDocumentLoader(); + LocalFrame* frame = document_->GetFrame(); + DCHECK(frame); + return document_loader_ != frame->Loader().GetDocumentLoader(); } bool FrameResourceFetcherProperties::IsSubframeDeprioritizationEnabled() const { - Settings* settings = frame_or_imported_document_->GetFrame().GetSettings(); + LocalFrame* frame = document_->GetFrame(); + DCHECK(frame); + Settings* settings = frame->GetSettings(); if (!settings) { return false; } @@ -105,12 +124,22 @@ bool FrameResourceFetcherProperties::IsSubframeDeprioritizationEnabled() const { } scheduler::FrameStatus FrameResourceFetcherProperties::GetFrameStatus() const { - return scheduler::GetFrameStatus( - frame_or_imported_document_->GetFrame().GetFrameScheduler()); + LocalFrame* frame = document_->GetFrame(); + DCHECK(frame); + return scheduler::GetFrameStatus(frame->GetFrameScheduler()); } const KURL& FrameResourceFetcherProperties::WebBundlePhysicalUrl() const { return web_bundle_physical_url_; } +int FrameResourceFetcherProperties::GetOutstandingThrottledLimit() const { + static const int main_frame_limit = + kOutstandingLimitForBackgroundMainFrame.Get(); + static const int sub_frame_limit = + kOutstandingLimitForBackgroundSubFrame.Get(); + + return IsMainFrame() ? main_frame_limit : sub_frame_limit; +} + } // namespace blink |