Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(107)

Unified Diff: net/base/load_timing_info.h

Issue 11428150: LoadTiming implementation in net, part 1. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Fix a header or two Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | net/base/load_timing_info.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/base/load_timing_info.h
===================================================================
--- net/base/load_timing_info.h (revision 0)
+++ net/base/load_timing_info.h (revision 0)
@@ -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_
Property changes on: net\base\load_timing_info.h
___________________________________________________________________
Added: svn:eol-style
+ LF
« no previous file with comments | « no previous file | net/base/load_timing_info.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698