summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/core/loader/frame_resource_fetcher_properties.cc
diff options
context:
space:
mode:
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.cc79
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