summaryrefslogtreecommitdiffstats
path: root/chrome/browser/net/load_timing_observer.cc
diff options
context:
space:
mode:
authorpfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-17 17:22:23 +0000
committerpfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-17 17:22:23 +0000
commit9bb7847c6dd44fe682a9d617b8829c0bcda0a4e1 (patch)
tree1fd5e131c07ab3a878b4ad606aae7cbc49e20acd /chrome/browser/net/load_timing_observer.cc
parent999fbf9357836ce1f5fd9334417d90ba3d3061e6 (diff)
downloadchromium_src-9bb7847c6dd44fe682a9d617b8829c0bcda0a4e1.zip
chromium_src-9bb7847c6dd44fe682a9d617b8829c0bcda0a4e1.tar.gz
chromium_src-9bb7847c6dd44fe682a9d617b8829c0bcda0a4e1.tar.bz2
DevTools: provide SSL networks time as a part of LoadTimingInfo.
Review URL: http://codereview.chromium.org/2868054 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@52831 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/net/load_timing_observer.cc')
-rw-r--r--chrome/browser/net/load_timing_observer.cc49
1 files changed, 49 insertions, 0 deletions
diff --git a/chrome/browser/net/load_timing_observer.cc b/chrome/browser/net/load_timing_observer.cc
index cd80b7d..d0e0485 100644
--- a/chrome/browser/net/load_timing_observer.cc
+++ b/chrome/browser/net/load_timing_observer.cc
@@ -71,6 +71,8 @@ void LoadTimingObserver::OnAddEntry(net::NetLog::EventType type,
OnAddURLRequestEntry(type, time, source, phase, params);
else if (source.type == net::NetLog::SOURCE_CONNECT_JOB)
OnAddConnectJobEntry(type, time, source, phase, params);
+ else if (source.type == net::NetLog::SOURCE_SOCKET)
+ OnAddSocketEntry(type, time, source, phase, params);
}
void LoadTimingObserver::OnAddURLRequestEntry(
@@ -148,6 +150,14 @@ void LoadTimingObserver::OnAddURLRequestEntry(
case net::NetLog::TYPE_SOCKET_POOL_BOUND_TO_SOCKET:
record->socket_log_id = static_cast<net::NetLogSourceParameter*>(
params)->value().id;
+ if (!record->socket_reused) {
+ SocketToRecordMap::iterator it =
+ socket_to_record_.find(record->socket_log_id);
+ if (it != socket_to_record_.end() && !it->second.ssl_start.is_null()) {
+ timing.ssl_start = TimeTicksToOffset(it->second.ssl_start, record);
+ timing.ssl_end = TimeTicksToOffset(it->second.ssl_end, record);
+ }
+ }
break;
case net::NetLog::TYPE_HTTP_TRANSACTION_SEND_REQUEST:
case net::NetLog::TYPE_SPDY_TRANSACTION_SEND_REQUEST:
@@ -204,3 +214,42 @@ void LoadTimingObserver::OnAddConnectJobEntry(
}
}
}
+
+void LoadTimingObserver::OnAddSocketEntry(
+ net::NetLog::EventType type,
+ const base::TimeTicks& time,
+ const net::NetLog::Source& source,
+ net::NetLog::EventPhase phase,
+ net::NetLog::EventParameters* params) {
+ bool is_begin = phase == net::NetLog::PHASE_BEGIN;
+ bool is_end = phase == net::NetLog::PHASE_END;
+
+ // Manage record lifetime based on the SOCKET_ALIVE entry.
+ if (type == net::NetLog::TYPE_SOCKET_ALIVE) {
+ if (is_begin) {
+ // Prevents us from passively growing the memory memory unbounded in case
+ // something went wrong. Should not happen.
+ if (socket_to_record_.size() > kMaxNumEntries) {
+ LOG(WARNING) << "The load timing observer socket count has grown "
+ "larger than expected, resetting";
+ socket_to_record_.clear();
+ }
+
+ socket_to_record_.insert(
+ std::make_pair(source.id, SocketRecord()));
+ } else if (is_end) {
+ socket_to_record_.erase(source.id);
+ }
+ return;
+ }
+ SocketToRecordMap::iterator it = socket_to_record_.find(source.id);
+ if (it == socket_to_record_.end())
+ return;
+
+ if (type == net::NetLog::TYPE_SSL_CONNECT) {
+ if (is_begin)
+ it->second.ssl_start = time;
+ else if (is_end)
+ it->second.ssl_end = time;
+ }
+}