Commit 1de7ce0e authored by Tarun Bansal's avatar Tarun Bansal Committed by Commit Bot

Same origin preconnects: Make retry delay a finch configurable param

This allows us to experiment with larger values for retry delay
(e.g., value of 5 seconds would ensure that most of the preconnects
finish by that time). Larger values would result in subsequent
preconnects being not no-op.

Change-Id: I0f35fce774ee752ede434806e7b23f3d1b724e4e
Bug: 1130607
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2419556Reviewed-by: default avatarRyan Sturm <ryansturm@chromium.org>
Commit-Queue: Tarun Bansal <tbansal@chromium.org>
Cr-Commit-Position: refs/heads/master@{#808971}
parent 828fde40
...@@ -24,4 +24,9 @@ const base::Feature ...@@ -24,4 +24,9 @@ const base::Feature
"NavigationPredictorEnablePreconnectOnSameDocumentNavigations", "NavigationPredictorEnablePreconnectOnSameDocumentNavigations",
base::FEATURE_DISABLED_BY_DEFAULT}; base::FEATURE_DISABLED_BY_DEFAULT};
// Used for controlling the navigation predictor based preconnect experiments.
const base::Feature kNavigationPredictorPreconnectSocketCompletionTime{
"NavigationPredictorPreconnectSocketCompletionTime",
base::FEATURE_DISABLED_BY_DEFAULT};
} // namespace features } // namespace features
...@@ -14,6 +14,7 @@ namespace features { ...@@ -14,6 +14,7 @@ namespace features {
extern const base::Feature kNavigationPredictorPreconnectHoldback; extern const base::Feature kNavigationPredictorPreconnectHoldback;
extern const base::Feature extern const base::Feature
kNavigationPredictorEnablePreconnectOnSameDocumentNavigations; kNavigationPredictorEnablePreconnectOnSameDocumentNavigations;
extern const base::Feature kNavigationPredictorPreconnectSocketCompletionTime;
} // namespace features } // namespace features
......
...@@ -179,7 +179,10 @@ void NavigationPredictorPreconnectClient::MaybePreconnectNow( ...@@ -179,7 +179,10 @@ void NavigationPredictorPreconnectClient::MaybePreconnectNow(
// The delay beyond the idle socket timeout that net uses when // The delay beyond the idle socket timeout that net uses when
// re-preconnecting. If negative, no retries occur. // re-preconnecting. If negative, no retries occur.
constexpr int retry_delay_ms = 50; const base::TimeDelta retry_delay =
base::TimeDelta::FromMilliseconds(base::GetFieldTrialParamByFeatureAsInt(
features::kNavigationPredictorPreconnectSocketCompletionTime,
"preconnect_socket_completion_time_msec", 50));
// Set/Reset the timer to fire after the preconnect times out. Add an extra // Set/Reset the timer to fire after the preconnect times out. Add an extra
// delay to make sure the preconnect has expired if it wasn't used. // delay to make sure the preconnect has expired if it wasn't used.
...@@ -187,8 +190,8 @@ void NavigationPredictorPreconnectClient::MaybePreconnectNow( ...@@ -187,8 +190,8 @@ void NavigationPredictorPreconnectClient::MaybePreconnectNow(
FROM_HERE, FROM_HERE,
base::TimeDelta::FromSeconds(base::GetFieldTrialParamByFeatureAsInt( base::TimeDelta::FromSeconds(base::GetFieldTrialParamByFeatureAsInt(
net::features::kNetUnusedIdleSocketTimeout, net::features::kNetUnusedIdleSocketTimeout,
"unused_idle_socket_timeout_seconds", 10)) + "unused_idle_socket_timeout_seconds", 60)) +
base::TimeDelta::FromMilliseconds(retry_delay_ms), retry_delay,
base::BindOnce(&NavigationPredictorPreconnectClient::MaybePreconnectNow, base::BindOnce(&NavigationPredictorPreconnectClient::MaybePreconnectNow,
base::Unretained(this), preconnects_attempted + 1)); base::Unretained(this), preconnects_attempted + 1));
} }
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include "base/metrics/field_trial_params.h" #include "base/metrics/field_trial_params.h"
#include "base/time/time.h" #include "base/time/time.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "chrome/browser/navigation_predictor/navigation_predictor_features.h"
#include "chrome/browser/predictors/loading_predictor.h" #include "chrome/browser/predictors/loading_predictor.h"
#include "chrome/browser/predictors/loading_predictor_factory.h" #include "chrome/browser/predictors/loading_predictor_factory.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
...@@ -106,7 +107,10 @@ void SearchEnginePreconnector::PreconnectDSE() { ...@@ -106,7 +107,10 @@ void SearchEnginePreconnector::PreconnectDSE() {
// The delay beyond the idle socket timeout that net uses when // The delay beyond the idle socket timeout that net uses when
// re-preconnecting. If negative, no retries occur. // re-preconnecting. If negative, no retries occur.
constexpr base::TimeDelta kRelayDelay = base::TimeDelta::FromMilliseconds(50); const base::TimeDelta retry_delay =
base::TimeDelta::FromMilliseconds(base::GetFieldTrialParamByFeatureAsInt(
features::kNavigationPredictorPreconnectSocketCompletionTime,
"preconnect_socket_completion_time_msec", 50));
// Set/Reset the timer to fire after the preconnect times out. Add an extra // Set/Reset the timer to fire after the preconnect times out. Add an extra
// delay to make sure the preconnect has expired if it wasn't used. // delay to make sure the preconnect has expired if it wasn't used.
...@@ -115,7 +119,7 @@ void SearchEnginePreconnector::PreconnectDSE() { ...@@ -115,7 +119,7 @@ void SearchEnginePreconnector::PreconnectDSE() {
base::TimeDelta::FromSeconds(base::GetFieldTrialParamByFeatureAsInt( base::TimeDelta::FromSeconds(base::GetFieldTrialParamByFeatureAsInt(
net::features::kNetUnusedIdleSocketTimeout, net::features::kNetUnusedIdleSocketTimeout,
"unused_idle_socket_timeout_seconds", 60)) + "unused_idle_socket_timeout_seconds", 60)) +
kRelayDelay, retry_delay,
base::BindOnce(&SearchEnginePreconnector::PreconnectDSE, base::BindOnce(&SearchEnginePreconnector::PreconnectDSE,
base::Unretained(this))); base::Unretained(this)));
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment