| Index: net/socket/tcp_client_socket_win.cc
|
| ===================================================================
|
| --- net/socket/tcp_client_socket_win.cc (revision 25625)
|
| +++ net/socket/tcp_client_socket_win.cc (working copy)
|
| @@ -7,6 +7,7 @@
|
| #include "base/basictypes.h"
|
| #include "base/compiler_specific.h"
|
| #include "base/memory_debug.h"
|
| +#include "base/stats_counters.h"
|
| #include "base/string_util.h"
|
| #include "base/sys_info.h"
|
| #include "base/trace_event.h"
|
| @@ -239,6 +240,9 @@
|
| if (socket_ != INVALID_SOCKET)
|
| return OK;
|
|
|
| + static StatsCounter connects("tcp.connect");
|
| + connects.Increment();
|
| +
|
| TRACE_EVENT_BEGIN("socket.connect", this, "");
|
| const struct addrinfo* ai = current_ai_;
|
| DCHECK(ai);
|
| @@ -386,6 +390,8 @@
|
| // false error reports.
|
| // See bug 5297.
|
| base::MemoryDebug::MarkAsInitialized(core_->read_buffer_.buf, num);
|
| + static StatsCounter read_bytes("tcp.read_bytes");
|
| + read_bytes.Add(num);
|
| return static_cast<int>(num);
|
| }
|
| } else {
|
| @@ -409,6 +415,9 @@
|
| DCHECK_GT(buf_len, 0);
|
| DCHECK(!core_->write_iobuffer_);
|
|
|
| + static StatsCounter reads("tcp.writes");
|
| + reads.Increment();
|
| +
|
| core_->write_buffer_.len = buf_len;
|
| core_->write_buffer_.buf = buf->data();
|
|
|
| @@ -422,6 +431,8 @@
|
| if (rv == 0) {
|
| if (ResetEventIfSignaled(core_->write_overlapped_.hEvent)) {
|
| TRACE_EVENT_END("socket.write", this, StringPrintf("%d bytes", num));
|
| + static StatsCounter write_bytes("tcp.write_bytes");
|
| + write_bytes.Add(num);
|
| return static_cast<int>(num);
|
| }
|
| } else {
|
| @@ -436,6 +447,20 @@
|
| return ERR_IO_PENDING;
|
| }
|
|
|
| +bool TCPClientSocketWin::SetReceiveBufferSize(int32 size) {
|
| + int rv = setsockopt(socket_, SOL_SOCKET, SO_RCVBUF,
|
| + reinterpret_cast<const char*>(&size), sizeof(size));
|
| + DCHECK(!rv) << "Could not set socket receive buffer size: " << GetLastError();
|
| + return rv == 0;
|
| +}
|
| +
|
| +bool TCPClientSocketWin::SetSendBufferSize(int32 size) {
|
| + int rv = setsockopt(socket_, SOL_SOCKET, SO_SNDBUF,
|
| + reinterpret_cast<const char*>(&size), sizeof(size));
|
| + DCHECK(!rv) << "Could not set socket send buffer size: " << GetLastError();
|
| + return rv == 0;
|
| +}
|
| +
|
| int TCPClientSocketWin::CreateSocket(const struct addrinfo* ai) {
|
| socket_ = WSASocket(ai->ai_family, ai->ai_socktype, ai->ai_protocol, NULL, 0,
|
| WSA_FLAG_OVERLAPPED);
|
| @@ -459,15 +484,9 @@
|
| base::SysInfo::OperatingSystemVersionNumbers(&major_version, &minor_version,
|
| &fix_version);
|
| if (major_version < 6) {
|
| - const int kSocketBufferSize = 64 * 1024;
|
| - int rv = setsockopt(socket_, SOL_SOCKET, SO_SNDBUF,
|
| - reinterpret_cast<const char*>(&kSocketBufferSize),
|
| - sizeof(kSocketBufferSize));
|
| - DCHECK(!rv) << "Could not set socket send buffer size";
|
| - rv = setsockopt(socket_, SOL_SOCKET, SO_RCVBUF,
|
| - reinterpret_cast<const char*>(&kSocketBufferSize),
|
| - sizeof(kSocketBufferSize));
|
| - DCHECK(!rv) << "Could not set socket receive buffer size";
|
| + const int32 kSocketBufferSize = 64 * 1024;
|
| + SetReceiveBufferSize(kSocketBufferSize);
|
| + SetSendBufferSize(kSocketBufferSize);
|
| }
|
|
|
| // Disable Nagle.
|
| @@ -504,6 +523,9 @@
|
| DCHECK_NE(rv, ERR_IO_PENDING);
|
| DCHECK(read_callback_);
|
|
|
| + static StatsCounter read_bytes("tcp.read_bytes");
|
| + read_bytes.Add(rv);
|
| +
|
| // since Run may result in Read being called, clear read_callback_ up front.
|
| CompletionCallback* c = read_callback_;
|
| read_callback_ = NULL;
|
| @@ -514,6 +536,9 @@
|
| DCHECK_NE(rv, ERR_IO_PENDING);
|
| DCHECK(write_callback_);
|
|
|
| + static StatsCounter write_bytes("tcp.write_bytes");
|
| + write_bytes.Add(rv);
|
| +
|
| // since Run may result in Write being called, clear write_callback_ up front.
|
| CompletionCallback* c = write_callback_;
|
| write_callback_ = NULL;
|
|
|