// Copyright 2012 The Chromium Authors // 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 <stdint.h> #include "base/time/time.h" #include "net/base/net_export.h" namespace net { // Structure containing timing information for a request. // It addresses the needs of // http://groups.google.com/group/http-archive-specification/web/har-1-1-spec, // http://dev.w3.org/2006/webapi/WebTiming/, and // http://www.w3.org/TR/resource-timing/. // // 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. // // Requests with connection errors generally only have request start times as // well, since they never received an established socket. // // The general order for events is: // request_start // service_worker_router_evaluation_start // service_worker_cache_lookup_start // service_worker_start_time // proxy_start // proxy_end // domain_lookup_start // domain_lookup_end // connect_start // ssl_start // ssl_end // connect_end // send_start // send_end // service_worker_ready_time // service_worker_fetch_start // service_worker_respond_with_settled // first_early_hints_time // receive_headers_start // receive_non_informational_headers_start // receive_headers_end // // Times represent when a request starts/stops blocking on an event(*), not the // time the events actually occurred. In particular, in the case of preconnects // and socket reuse, no time may be spent blocking on establishing a connection. // In the case of SPDY, PAC scripts are only run once for each shared session, // so no time may be spent blocking on them. // // (*) Note 1: push_start and push_end are the exception to this, as they // represent the operation which is asynchronous to normal request flow and // hence are provided as absolute values and not converted to "blocking" time. // // (*) Note 2: Internally to the network stack, times are those of actual event // occurrence. URLRequest converts them to time which the network stack was // blocked on each state, as per resource timing specs. // // DNS and SSL times are both times for the host, not the proxy, so DNS times // when using proxies are null, and only requests to HTTPS hosts (Not proxies) // have SSL times. struct NET_EXPORT LoadTimingInfo { … }; } // namespace net #endif // NET_BASE_LOAD_TIMING_INFO_H_