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
"NavigationPredictorEnablePreconnectOnSameDocumentNavigations",
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
......@@ -14,6 +14,7 @@ namespace features {
extern const base::Feature kNavigationPredictorPreconnectHoldback;
extern const base::Feature
kNavigationPredictorEnablePreconnectOnSameDocumentNavigations;
extern const base::Feature kNavigationPredictorPreconnectSocketCompletionTime;
} // namespace features
......
......@@ -179,7 +179,10 @@ void NavigationPredictorPreconnectClient::MaybePreconnectNow(
// The delay beyond the idle socket timeout that net uses when
// 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
// delay to make sure the preconnect has expired if it wasn't used.
......@@ -187,8 +190,8 @@ void NavigationPredictorPreconnectClient::MaybePreconnectNow(
FROM_HERE,
base::TimeDelta::FromSeconds(base::GetFieldTrialParamByFeatureAsInt(
net::features::kNetUnusedIdleSocketTimeout,
"unused_idle_socket_timeout_seconds", 10)) +
base::TimeDelta::FromMilliseconds(retry_delay_ms),
"unused_idle_socket_timeout_seconds", 60)) +
retry_delay,
base::BindOnce(&NavigationPredictorPreconnectClient::MaybePreconnectNow,
base::Unretained(this), preconnects_attempted + 1));
}
......
......@@ -8,6 +8,7 @@
#include "base/metrics/field_trial_params.h"
#include "base/time/time.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_factory.h"
#include "chrome/browser/profiles/profile.h"
......@@ -106,7 +107,10 @@ void SearchEnginePreconnector::PreconnectDSE() {
// The delay beyond the idle socket timeout that net uses when
// 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
// delay to make sure the preconnect has expired if it wasn't used.
......@@ -115,7 +119,7 @@ void SearchEnginePreconnector::PreconnectDSE() {
base::TimeDelta::FromSeconds(base::GetFieldTrialParamByFeatureAsInt(
net::features::kNetUnusedIdleSocketTimeout,
"unused_idle_socket_timeout_seconds", 60)) +
kRelayDelay,
retry_delay,
base::BindOnce(&SearchEnginePreconnector::PreconnectDSE,
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