diff options
author | gagansingh@google.com <gagansingh@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-27 17:26:41 +0000 |
---|---|---|
committer | gagansingh@google.com <gagansingh@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-27 17:26:41 +0000 |
commit | 5e6efa537dc4c06912f0bb42f16991c7ee7eafbc (patch) | |
tree | bd1336ab3629d3afd20c57c2c9d6de04603e1a10 /net/socket/tcp_client_socket_libevent.cc | |
parent | 0d1293040f1f79e3cddc52ba18fc6ec85f140800 (diff) | |
download | chromium_src-5e6efa537dc4c06912f0bb42f16991c7ee7eafbc.zip chromium_src-5e6efa537dc4c06912f0bb42f16991c7ee7eafbc.tar.gz chromium_src-5e6efa537dc4c06912f0bb42f16991c7ee7eafbc.tar.bz2 |
Warmth of a connection (cwnd) is estimated by the amount of data written to the socket.
Choosing the warmest connection would mean faster resource load times.
idle time is the time a socket has remained idle (no http requests being served on it).
Probability of server resetting a connection increases with idle time duration.
Using a cost function that takes into account bytes transferred and idle time to pick best connection to schedule http requests on.
CODEREVIEW done in http://codereview.chromium.org/6990036/
Contributed by gagansingh@google.com
Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=90373
Reverted: http://codereview.chromium.org/7255002 :(
Have fixed 2 things since:
1. Removed LOG(ERROR) from http_basic_stream.cc that was causing layout tests to fail.
2. Initialized class variables in http_basic_stream.cc that was causing uninitialized memory bugs in valgrind: http://code.google.com/p/chromium/issues/detail?id=87423
Review URL: http://codereview.chromium.org/7251004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@90601 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/socket/tcp_client_socket_libevent.cc')
-rw-r--r-- | net/socket/tcp_client_socket_libevent.cc | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/net/socket/tcp_client_socket_libevent.cc b/net/socket/tcp_client_socket_libevent.cc index 3c5ec13..bc6270d 100644 --- a/net/socket/tcp_client_socket_libevent.cc +++ b/net/socket/tcp_client_socket_libevent.cc @@ -137,7 +137,8 @@ TCPClientSocketLibevent::TCPClientSocketLibevent( net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_SOCKET)), previously_disconnected_(false), use_tcp_fastopen_(false), - tcp_fastopen_connected_(false) { + tcp_fastopen_connected_(false), + num_bytes_read_(0) { scoped_refptr<NetLog::EventParameters> params; if (source.is_valid()) params = new NetLogSourceParameter("source_dependency", source); @@ -298,6 +299,7 @@ int TCPClientSocketLibevent::DoConnect() { // Connect the socket. if (!use_tcp_fastopen_) { + connect_start_time_ = base::TimeTicks::Now(); if (!HANDLE_EINTR(connect(socket_, current_ai_->ai_addr, static_cast<int>(current_ai_->ai_addrlen)))) { // Connected without waiting! @@ -337,6 +339,7 @@ int TCPClientSocketLibevent::DoConnectComplete(int result) { net_log_.EndEvent(NetLog::TYPE_TCP_CONNECT_ATTEMPT, params); if (result == OK) { + connect_time_micros_ = base::TimeTicks::Now() - connect_start_time_; write_socket_watcher_.StopWatchingFileDescriptor(); use_history_.set_was_ever_connected(); return OK; // Done! @@ -439,6 +442,7 @@ int TCPClientSocketLibevent::Read(IOBuffer* buf, if (nread >= 0) { base::StatsCounter read_bytes("tcp.read_bytes"); read_bytes.Add(nread); + num_bytes_read_ += static_cast<int64>(nread); if (nread > 0) use_history_.set_was_used_to_convey_data(); net_log_.AddByteTransferEvent(NetLog::TYPE_SOCKET_BYTES_RECEIVED, nread, @@ -633,6 +637,7 @@ void TCPClientSocketLibevent::DidCompleteRead() { result = bytes_transferred; base::StatsCounter read_bytes("tcp.read_bytes"); read_bytes.Add(bytes_transferred); + num_bytes_read_ += static_cast<int64>(bytes_transferred); if (bytes_transferred > 0) use_history_.set_was_used_to_convey_data(); net_log_.AddByteTransferEvent(NetLog::TYPE_SOCKET_BYTES_RECEIVED, result, @@ -722,4 +727,12 @@ bool TCPClientSocketLibevent::UsingTCPFastOpen() const { return use_tcp_fastopen_; } +int64 TCPClientSocketLibevent::NumBytesRead() const { + return num_bytes_read_; +} + +base::TimeDelta TCPClientSocketLibevent::GetConnectTimeMicros() const { + return connect_time_micros_; +} + } // namespace net |