diff options
author | ziadh@chromium.org <ziadh@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-25 01:45:22 +0000 |
---|---|---|
committer | ziadh@chromium.org <ziadh@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-25 01:45:22 +0000 |
commit | 06d940444eeed9c0b196340ff6299cefa60df578 (patch) | |
tree | 483410804c8cb76de927009a757c5598eb52aa35 /net/socket/client_socket_pool_base.cc | |
parent | 4b440e1c6aed62fa81c22deb00cb42db765d0cca (diff) | |
download | chromium_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.cc | 39 |
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, |