summaryrefslogtreecommitdiffstats
path: root/net/socket/client_socket_pool_base.cc
diff options
context:
space:
mode:
authorziadh@chromium.org <ziadh@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-25 01:45:22 +0000
committerziadh@chromium.org <ziadh@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-25 01:45:22 +0000
commit06d940444eeed9c0b196340ff6299cefa60df578 (patch)
tree483410804c8cb76de927009a757c5598eb52aa35 /net/socket/client_socket_pool_base.cc
parent4b440e1c6aed62fa81c22deb00cb42db765d0cca (diff)
downloadchromium_src-06d940444eeed9c0b196340ff6299cefa60df578.zip
chromium_src-06d940444eeed9c0b196340ff6299cefa60df578.tar.gz
chromium_src-06d940444eeed9c0b196340ff6299cefa60df578.tar.bz2
A/B experiment for re-establishing TCP connections.
We would like to test the impact of automatic retries when a TCP connection exceeds a certain threshold before it gets back an ACK. We are observing a fair number of sockets where the connection had been established, but the sockets were not used thereafter. r=mbelche Review URL: http://codereview.chromium.org/3191019 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@57276 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/socket/client_socket_pool_base.cc')
-rw-r--r--net/socket/client_socket_pool_base.cc39
1 files changed, 27 insertions, 12 deletions
diff --git a/net/socket/client_socket_pool_base.cc b/net/socket/client_socket_pool_base.cc
index 334a9dc..2e8534e 100644
--- a/net/socket/client_socket_pool_base.cc
+++ b/net/socket/client_socket_pool_base.cc
@@ -27,6 +27,10 @@ namespace {
// some conditions. See http://crbug.com/4606.
const int kCleanupInterval = 10; // DO NOT INCREASE THIS TIMEOUT.
+// Indicate whether or not we should establish a new TCP connection after a
+// certain timeout has passed without receiving an ACK.
+bool g_connect_backup_jobs_enabled = true;
+
} // namespace
namespace net {
@@ -137,7 +141,7 @@ ClientSocketPoolBaseHelper::ClientSocketPoolBaseHelper(
unused_idle_socket_timeout_(unused_idle_socket_timeout),
used_idle_socket_timeout_(used_idle_socket_timeout),
connect_job_factory_(connect_job_factory),
- backup_jobs_enabled_(false),
+ connect_backup_jobs_enabled_(false),
ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)),
pool_generation_number_(0),
in_destructor_(false) {
@@ -247,10 +251,11 @@ int ClientSocketPoolBaseHelper::RequestSocketInternal(
// If we don't have any sockets in this group, set a timer for potentially
// creating a new one. If the SYN is lost, this backup socket may complete
// before the slow socket, improving end user latency.
- if (group.IsEmpty() && !group.backup_job && backup_jobs_enabled_) {
- group.backup_job = connect_job_factory_->NewConnectJob(group_name,
- *request,
- this);
+ if (group.IsEmpty() && !group.connect_backup_job &&
+ connect_backup_jobs_enabled_) {
+ group.connect_backup_job = connect_job_factory_->NewConnectJob(group_name,
+ *request,
+ this);
StartBackupSocketTimer(group_name);
}
@@ -327,7 +332,7 @@ void ClientSocketPoolBaseHelper::OnBackupSocketTimerFired(
CHECK(group.backup_task);
group.backup_task = NULL;
- CHECK(group.backup_job);
+ CHECK(group.connect_backup_job);
// If there are no more jobs pending, there is no work to do.
// If we've done our cleanups correctly, this should not happen.
@@ -345,14 +350,15 @@ void ClientSocketPoolBaseHelper::OnBackupSocketTimerFired(
return;
}
- group.backup_job->net_log().AddEvent(NetLog::TYPE_SOCKET_BACKUP_CREATED,
- NULL);
+ group.connect_backup_job->net_log().AddEvent(
+ NetLog::TYPE_SOCKET_BACKUP_CREATED,
+ NULL);
SIMPLE_STATS_COUNTER("socket.backup_created");
- int rv = group.backup_job->Connect();
+ int rv = group.connect_backup_job->Connect();
connecting_socket_count_++;
- group.jobs.insert(group.backup_job);
- ConnectJob* job = group.backup_job;
- group.backup_job = NULL;
+ group.jobs.insert(group.connect_backup_job);
+ ConnectJob* job = group.connect_backup_job;
+ group.connect_backup_job = NULL;
if (rv != ERR_IO_PENDING)
OnConnectJobComplete(rv, job);
}
@@ -495,6 +501,15 @@ void ClientSocketPoolBaseHelper::CleanupIdleSockets(bool force) {
}
}
+// static
+void ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(bool enabled) {
+ g_connect_backup_jobs_enabled = enabled;
+}
+
+void ClientSocketPoolBaseHelper::EnableConnectBackupJobs() {
+ connect_backup_jobs_enabled_ = g_connect_backup_jobs_enabled;
+}
+
void ClientSocketPoolBaseHelper::IncrementIdleCount() {
if (++idle_socket_count_ == 1)
timer_.Start(TimeDelta::FromSeconds(kCleanupInterval), this,