diff options
author | mmenke@chromium.org <mmenke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-07 23:17:48 +0000 |
---|---|---|
committer | mmenke@chromium.org <mmenke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-07 23:17:48 +0000 |
commit | 034df0f31b28222fd689600695edbdc2de66f626 (patch) | |
tree | 3e75d5fea71352d84fb33f93d4a3249248bc6704 /net/base | |
parent | 7f39bb69692953a1085bd2ac7eb8eb53ecf5f46a (diff) | |
download | chromium_src-034df0f31b28222fd689600695edbdc2de66f626.zip chromium_src-034df0f31b28222fd689600695edbdc2de66f626.tar.gz chromium_src-034df0f31b28222fd689600695edbdc2de66f626.tar.bz2 |
LoadTiming implementation in net, part 1.
Calculate connection timing information in ConnectJobs,
add store it in ClientSocketHandles.
BUG=77446
Review URL: https://codereview.chromium.org/11428150
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@175412 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/base')
-rw-r--r-- | net/base/load_timing_info.cc | 22 | ||||
-rw-r--r-- | net/base/load_timing_info.h | 109 |
2 files changed, 131 insertions, 0 deletions
diff --git a/net/base/load_timing_info.cc b/net/base/load_timing_info.cc new file mode 100644 index 0000000..ab5b750 --- /dev/null +++ b/net/base/load_timing_info.cc @@ -0,0 +1,22 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "net/base/load_timing_info.h" + +#include "net/base/net_log.h" + +namespace net { + +LoadTimingInfo::ConnectTiming::ConnectTiming() {} + +LoadTimingInfo::ConnectTiming::~ConnectTiming() {} + +LoadTimingInfo::LoadTimingInfo() : socket_reused(false), + socket_log_id(NetLog::Source::kInvalidId) { +} + +LoadTimingInfo::~LoadTimingInfo() {} + +} // namespace net + diff --git a/net/base/load_timing_info.h b/net/base/load_timing_info.h new file mode 100644 index 0000000..446b1e9 --- /dev/null +++ b/net/base/load_timing_info.h @@ -0,0 +1,109 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef NET_BASE_LOAD_TIMING_INFO_H_ +#define NET_BASE_LOAD_TIMING_INFO_H_ + +#include "base/basictypes.h" +#include "base/time.h" +#include "net/base/net_export.h" + +namespace net { + +// All events that do not apply to a request have null times. For non-HTTP +// requests, all times other than the request_start times are null. +// +// The general order for events is: +// request_start +// proxy_start +// proxy_end +// *dns_start +// *dns_end +// *connect_start +// *ssl_start +// *ssl_end +// *connect_end +// send_start +// send_end +// receive_headers_end +// +// Those times without an asterisk are computed by the URLRequest, or by objects +// it directly creates and always owns. Those with an asterisk are computed +// by the connection attempt itself. Since the connection attempt may be +// started before a URLRequest, the starred times may occur before, during, or +// after the request_start and proxy events. +struct NET_EXPORT LoadTimingInfo { + // Contains the LoadTimingInfo events related to establishing a connection. + // These are all set by ConnectJobs. + struct NET_EXPORT_PRIVATE ConnectTiming { + ConnectTiming(); + ~ConnectTiming(); + + // The time spent looking up the host's DNS address. Null for requests that + // used proxies to look up the DNS address. Also null for SOCKS4 proxies, + // since the DNS address is only looked up after the connection is + // established, which results in unexpected event ordering. + // TODO(mmenke): The SOCKS4 event ordering could be refactored to allow + // these times to be non-null. + base::TimeTicks dns_start; + base::TimeTicks dns_end; + + // The time spent establishing the connection. Connect time includes proxy + // connect times (Though not proxy_resolve times), DNS lookup times, time + // spent waiting in certain queues, TCP, and SSL time. + // TODO(mmenke): For proxies, this includes time spent blocking on higher + // level socket pools. Fix this. + // TODO(mmenke): Retried connections to the same server should apparently + // be included in this time. Consider supporting that. + // Since the network stack has multiple notions of a "retry", + // handled at different levels, this may not be worth + // worrying about - backup jobs, reused socket failure, + // multiple round authentication. + base::TimeTicks connect_start; + base::TimeTicks connect_end; + + // The time when the SSL handshake started / completed. For non-HTTPS + // requests these are null. These times are only for the SSL connection to + // the final destination server, not an SSL/SPDY proxy. + base::TimeTicks ssl_start; + base::TimeTicks ssl_end; + }; + + LoadTimingInfo(); + ~LoadTimingInfo(); + + // True if the socket was reused. When true, DNS, connect, and SSL times + // will all be null. When false, those times may be null, too, for non-HTTP + // requests, or when they don't apply to a request. + bool socket_reused; + + // Unique socket ID, can be used to identify requests served by the same + // socket. + // TODO(mmenke): Do something reasonable for SPDY proxies. + uint32 socket_log_id; + + // Start time as a base::Time, so times can be coverted into actual times. + // Other times are recorded as TimeTicks so they are not affected by clock + // changes. + base::Time request_start_time; + + base::TimeTicks request_start; + + // The time spent determing which proxy to use. Null when there is no PAC. + base::TimeTicks proxy_resolve_start; + base::TimeTicks proxy_resolve_end; + + ConnectTiming connect_timing; + + // The time that sending HTTP request started / ended. + base::TimeTicks send_start; + base::TimeTicks send_end; + + // The time at which the end of the HTTP headers were received. + base::TimeTicks receive_headers_end; +}; + +} // namespace net + +#endif // NET_BASE_LOAD_TIMING_INFO_H_ |