OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef NET_BASE_LOAD_TIMING_INFO_H_ | 5 #ifndef NET_BASE_LOAD_TIMING_INFO_H_ |
6 #define NET_BASE_LOAD_TIMING_INFO_H_ | 6 #define NET_BASE_LOAD_TIMING_INFO_H_ |
7 | 7 |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include "base/time/time.h" | 10 #include "base/time/time.h" |
(...skipping 20 matching lines...) Expand all Loading... |
31 // dns_start | 31 // dns_start |
32 // dns_end | 32 // dns_end |
33 // connect_start | 33 // connect_start |
34 // ssl_start | 34 // ssl_start |
35 // ssl_end | 35 // ssl_end |
36 // connect_end | 36 // connect_end |
37 // send_start | 37 // send_start |
38 // send_end | 38 // send_end |
39 // receive_headers_end | 39 // receive_headers_end |
40 // | 40 // |
41 // Times represent when a request starts/stops blocking on an event, not the | 41 // Times represent when a request starts/stops blocking on an event(*), not the |
42 // time the events actually occurred. In particular, in the case of preconnects | 42 // time the events actually occurred. In particular, in the case of preconnects |
43 // and socket reuse, no time may be spent blocking on establishing a connection. | 43 // and socket reuse, no time may be spent blocking on establishing a connection. |
44 // In the case of SPDY, PAC scripts are only run once for each shared session, | 44 // In the case of SPDY, PAC scripts are only run once for each shared session, |
45 // so no time may be spent blocking on them. | 45 // so no time may be spent blocking on them. |
46 // | 46 // |
| 47 // (*) Note 1: push_start and push_end are the exception to this, as they |
| 48 // represent the operation which is asynchronous to normal request flow and |
| 49 // hence are provided as absolute values and not converted to "blocking" time. |
| 50 // |
| 51 // (*) Note 2: Internally to the network stack, times are those of actual event |
| 52 // occurrence. URLRequest converts them to time which the network stack was |
| 53 // blocked on each state, as per resource timing specs. |
| 54 // |
47 // DNS and SSL times are both times for the host, not the proxy, so DNS times | 55 // DNS and SSL times are both times for the host, not the proxy, so DNS times |
48 // when using proxies are null, and only requests to HTTPS hosts (Not proxies) | 56 // when using proxies are null, and only requests to HTTPS hosts (Not proxies) |
49 // have SSL times. One exception to this is when a proxy server itself returns | 57 // have SSL times. One exception to this is when a proxy server itself returns |
50 // a redirect response. In this case, the connect times treat the proxy as the | 58 // a redirect response. In this case, the connect times treat the proxy as the |
51 // host. The send and receive times will all be null, however. | 59 // host. The send and receive times will all be null, however. |
52 // See HttpNetworkTransaction::OnHttpsProxyTunnelResponse. | 60 // See HttpNetworkTransaction::OnHttpsProxyTunnelResponse. |
53 // TODO(mmenke): Is this worth fixing? | 61 // TODO(mmenke): Is this worth fixing? |
54 // | 62 // |
55 // Note that internal to the network stack, times are when events actually | |
56 // occurred. URLRequest converts them to time which the network stack was | |
57 // blocked on each state. | |
58 struct NET_EXPORT LoadTimingInfo { | 63 struct NET_EXPORT LoadTimingInfo { |
59 // Contains the LoadTimingInfo events related to establishing a connection. | 64 // Contains the LoadTimingInfo events related to establishing a connection. |
60 // These are all set by ConnectJobs. | 65 // These are all set by ConnectJobs. |
61 struct NET_EXPORT_PRIVATE ConnectTiming { | 66 struct NET_EXPORT_PRIVATE ConnectTiming { |
62 ConnectTiming(); | 67 ConnectTiming(); |
63 ~ConnectTiming(); | 68 ~ConnectTiming(); |
64 | 69 |
65 // The time spent looking up the host's DNS address. Null for requests that | 70 // The time spent looking up the host's DNS address. Null for requests that |
66 // used proxies to look up the DNS address. Also null for SOCKS4 proxies, | 71 // used proxies to look up the DNS address. Also null for SOCKS4 proxies, |
67 // since the DNS address is only looked up after the connection is | 72 // since the DNS address is only looked up after the connection is |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
129 base::TimeTicks proxy_resolve_end; | 134 base::TimeTicks proxy_resolve_end; |
130 | 135 |
131 ConnectTiming connect_timing; | 136 ConnectTiming connect_timing; |
132 | 137 |
133 // The time that sending HTTP request started / ended. | 138 // The time that sending HTTP request started / ended. |
134 base::TimeTicks send_start; | 139 base::TimeTicks send_start; |
135 base::TimeTicks send_end; | 140 base::TimeTicks send_end; |
136 | 141 |
137 // The time at which the end of the HTTP headers were received. | 142 // The time at which the end of the HTTP headers were received. |
138 base::TimeTicks receive_headers_end; | 143 base::TimeTicks receive_headers_end; |
| 144 |
| 145 // In case the resource was proactively pushed by the server, these are |
| 146 // the times that push started and ended. Note that push_end will be null |
| 147 // if the request is still being transmitted, i.e. the underlying h2 stream |
| 148 // is not closed by the server. |
| 149 base::TimeTicks push_start; |
| 150 base::TimeTicks push_end; |
139 }; | 151 }; |
140 | 152 |
141 } // namespace net | 153 } // namespace net |
142 | 154 |
143 #endif // NET_BASE_LOAD_TIMING_INFO_H_ | 155 #endif // NET_BASE_LOAD_TIMING_INFO_H_ |
OLD | NEW |