diff options
author | willchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-09-02 16:09:01 +0000 |
---|---|---|
committer | willchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-09-02 16:09:01 +0000 |
commit | 0f873e8291deea212112dc7d6b48b0f0450522c2 (patch) | |
tree | d888b57c8ff0e55d322e450d9df2d1f5eb36d283 /net/socket/client_socket_pool_base.cc | |
parent | eb7ce94497639ec1e9a7a1549dc941d8e28e98ba (diff) | |
download | chromium_src-0f873e8291deea212112dc7d6b48b0f0450522c2.zip chromium_src-0f873e8291deea212112dc7d6b48b0f0450522c2.tar.gz chromium_src-0f873e8291deea212112dc7d6b48b0f0450522c2.tar.bz2 |
Fix ClientSocketHandle reuse_type(). Correctly track socket use.
In particular, we used to consider that a socket had been used whenever it got returned to the ClientSocketPool. But, with preconnect, that is no longer true. Luckily, we now have UseHistory in the transport sockets. So, I create a WasEverUsed() method in ClientSocket, plumb this into all sockets, and use that in ClientSocketPoolBaseHelper instead of tracking whether or not the socket had been returned to the client or not.
This ultimately will have two implications. We will record the correct values in Net.HttpSocketType histograms and we will use the correct timeout for preconnect sockets in ClientSocketPoolBaseHelper::CleanupIdleSockets().
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/3353004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@58363 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 | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/net/socket/client_socket_pool_base.cc b/net/socket/client_socket_pool_base.cc index beb79ae..b982aa0 100644 --- a/net/socket/client_socket_pool_base.cc +++ b/net/socket/client_socket_pool_base.cc @@ -286,8 +286,8 @@ bool ClientSocketPoolBaseHelper::AssignIdleSocketToGroup( base::TimeDelta idle_time = base::TimeTicks::Now() - idle_socket.start_time; HandOutSocket( - idle_socket.socket, idle_socket.used, request->handle(), idle_time, - group, request->net_log()); + idle_socket.socket, idle_socket.socket->WasEverUsed(), + request->handle(), idle_time, group, request->net_log()); return true; } delete idle_socket.socket; @@ -447,8 +447,11 @@ bool ClientSocketPoolBaseHelper::IdleSocket::ShouldCleanup( base::TimeTicks now, base::TimeDelta timeout) const { bool timed_out = (now - start_time) >= timeout; - return timed_out || - !(used ? socket->IsConnectedAndIdle() : socket->IsConnected()); + if (timed_out) + return true; + if (socket->WasEverUsed()) + return !socket->IsConnectedAndIdle(); + return !socket->IsConnected(); } void ClientSocketPoolBaseHelper::CleanupIdleSockets(bool force) { @@ -474,7 +477,8 @@ void ClientSocketPoolBaseHelper::CleanupIdleSockets(bool force) { std::deque<IdleSocket>::iterator j = group->mutable_idle_sockets()->begin(); while (j != group->idle_sockets().end()) { base::TimeDelta timeout = - j->used ? used_idle_socket_timeout_ : unused_idle_socket_timeout_; + j->socket->WasEverUsed() ? + used_idle_socket_timeout_ : unused_idle_socket_timeout_; if (force || j->ShouldCleanup(now, timeout)) { delete j->socket; j = group->mutable_idle_sockets()->erase(j); @@ -553,7 +557,7 @@ void ClientSocketPoolBaseHelper::ReleaseSocket(const std::string& group_name, id == pool_generation_number_; if (can_reuse) { // Add it to the idle list. - AddIdleSocket(socket, true /* used socket */, group); + AddIdleSocket(socket, group); OnAvailableSocketSlot(group_name, group); } else { delete socket; @@ -651,7 +655,7 @@ void ClientSocketPoolBaseHelper::OnConnectJobComplete( r->net_log().EndEvent(NetLog::TYPE_SOCKET_POOL, NULL); InvokeUserCallbackLater(r->handle(), r->callback(), result); } else { - AddIdleSocket(socket.release(), false /* unused socket */, group); + AddIdleSocket(socket.release(), group); OnAvailableSocketSlot(group_name, group); CheckForStalledSocketGroups(); } @@ -771,12 +775,11 @@ void ClientSocketPoolBaseHelper::HandOutSocket( } void ClientSocketPoolBaseHelper::AddIdleSocket( - ClientSocket* socket, bool used, Group* group) { + ClientSocket* socket, Group* group) { DCHECK(socket); IdleSocket idle_socket; idle_socket.socket = socket; idle_socket.start_time = base::TimeTicks::Now(); - idle_socket.used = used; group->mutable_idle_sockets()->push_back(idle_socket); IncrementIdleCount(); |