Add instrumentation to ClientSocketPool, that writes to LoadLog.
BUG=http://crbug.com/14478
Review URL: http://codereview.chromium.org/174101
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@23855 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/net/socket/client_socket_pool_base.h b/net/socket/client_socket_pool_base.h
index bdcee36d..e6368ca1 100644
--- a/net/socket/client_socket_pool_base.h
+++ b/net/socket/client_socket_pool_base.h
@@ -64,7 +64,8 @@
ConnectJob(const std::string& group_name,
const ClientSocketHandle* key_handle,
base::TimeDelta timeout_duration,
- Delegate* delegate);
+ Delegate* delegate,
+ LoadLog* load_log);
virtual ~ConnectJob();
// Accessors
@@ -84,11 +85,13 @@
// if it succeeded.
int Connect();
+ LoadLog* load_log() { return load_log_; }
+
protected:
void set_load_state(LoadState load_state) { load_state_ = load_state; }
void set_socket(ClientSocket* socket) { socket_.reset(socket); }
ClientSocket* socket() { return socket_.get(); }
- Delegate* delegate() { return delegate_; }
+ void NotifyDelegateOfCompletion(int rv);
private:
virtual int ConnectInternal() = 0;
@@ -105,6 +108,7 @@
Delegate* delegate_;
LoadState load_state_;
scoped_ptr<ClientSocket> socket_;
+ scoped_refptr<LoadLog> load_log_;
DISALLOW_COPY_AND_ASSIGN(ConnectJob);
};
@@ -126,7 +130,8 @@
CompletionCallback* callback,
int priority,
LoadLog* load_log)
- : handle_(handle), callback_(callback), priority_(priority) {}
+ : handle_(handle), callback_(callback), priority_(priority),
+ load_log_(load_log) {}
virtual ~Request() {}
@@ -152,7 +157,8 @@
virtual ConnectJob* NewConnectJob(
const std::string& group_name,
const Request& request,
- ConnectJob::Delegate* delegate) const = 0;
+ ConnectJob::Delegate* delegate,
+ LoadLog* load_log) const = 0;
private:
DISALLOW_COPY_AND_ASSIGN(ConnectJobFactory);
@@ -265,6 +271,8 @@
static void InsertRequestIntoQueue(const Request* r,
RequestQueue* pending_requests);
+ static const Request* RemoveRequestFromQueue(RequestQueue::iterator it,
+ RequestQueue* pending_requests);
// Closes all idle sockets if |force| is true. Else, only closes idle
// sockets that timed out or can't be reused.
@@ -404,7 +412,8 @@
virtual ConnectJob* NewConnectJob(
const std::string& group_name,
const Request& request,
- ConnectJob::Delegate* delegate) const = 0;
+ ConnectJob::Delegate* delegate,
+ LoadLog* load_log) const = 0;
private:
DISALLOW_COPY_AND_ASSIGN(ConnectJobFactory);
@@ -432,9 +441,12 @@
LoadLog* load_log) {
scoped_ptr<Request> request(
new Request(handle, callback, priority, params, load_log));
+ LoadLog::BeginEvent(load_log, LoadLog::TYPE_SOCKET_POOL);
int rv = helper_->RequestSocket(group_name, request.get());
if (rv == ERR_IO_PENDING)
request.release();
+ else
+ LoadLog::EndEvent(load_log, LoadLog::TYPE_SOCKET_POOL);
return rv;
}
@@ -493,10 +505,11 @@
virtual ConnectJob* NewConnectJob(
const std::string& group_name,
const internal::ClientSocketPoolBaseHelper::Request& request,
- ConnectJob::Delegate* delegate) const {
+ ConnectJob::Delegate* delegate,
+ LoadLog* load_log) const {
const Request* casted_request = static_cast<const Request*>(&request);
return connect_job_factory_->NewConnectJob(
- group_name, *casted_request, delegate);
+ group_name, *casted_request, delegate, load_log);
}
const scoped_ptr<ConnectJobFactory> connect_job_factory_;