Chromium Code Reviews| Index: webkit/glue/weburlloader_impl.cc |
| =================================================================== |
| --- webkit/glue/weburlloader_impl.cc (revision 181655) |
| +++ webkit/glue/weburlloader_impl.cc (working copy) |
| @@ -130,8 +130,8 @@ |
| *error_code = net::OK; |
| // Assure same time for all time fields of data: URLs. |
| Time now = Time::Now(); |
| - info->load_timing.base_time = now; |
| - info->load_timing.base_ticks = TimeTicks::Now(); |
| + info->load_timing.request_start = TimeTicks::Now(); |
| + info->load_timing.request_start_time = now; |
| info->request_time = now; |
| info->response_time = now; |
| info->headers = NULL; |
| @@ -150,10 +150,22 @@ |
| typedef ResourceDevToolsInfo::HeadersVector HeadersVector; |
| +// Given a base time and a second time, returns the time from the base time to |
| +// the second time, in milliseconds. If the second time is null, returns -1. |
| +// The base time must not be null. |
| +int TimeTicksToOffset(base::TimeTicks base_time, base::TimeTicks time) { |
| + if (time.is_null()) |
| + return -1; |
|
eroman
2013/02/13 02:07:20
are downstream consumers expecting this -1?
mmenke
2013/02/13 02:26:46
-1 looks to be correct, looking at https://code.go
|
| + DCHECK(!base_time.is_null()); |
| + return static_cast<int>((time - base_time).InMillisecondsRoundedUp()); |
| +} |
| + |
| void PopulateURLResponse( |
| const GURL& url, |
| const ResourceResponseInfo& info, |
| WebURLResponse* response) { |
| + const net::LoadTimingInfo& load_timing = info.load_timing; |
| + |
| response->setURL(url); |
| response->setResponseTime(info.response_time.ToDoubleT()); |
| response->setMIMEType(WebString::fromUTF8(info.mime_type)); |
| @@ -162,8 +174,8 @@ |
| response->setSecurityInfo(info.security_info); |
| response->setAppCacheID(info.appcache_id); |
| response->setAppCacheManifestURL(info.appcache_manifest_url); |
| - response->setWasCached(!info.load_timing.base_time.is_null() && |
| - info.response_time < info.load_timing.base_time); |
| + response->setWasCached(!info.load_timing.request_start_time.is_null() && |
| + info.response_time < info.load_timing.request_start_time); |
| response->setWasFetchedViaSPDY(info.was_fetched_via_spdy); |
| response->setWasNpnNegotiated(info.was_npn_negotiated); |
| response->setWasAlternateProtocolAvailable( |
| @@ -172,29 +184,48 @@ |
| response->setRemoteIPAddress( |
| WebString::fromUTF8(info.socket_address.host())); |
| response->setRemotePort(info.socket_address.port()); |
| - response->setConnectionID(info.connection_id); |
| - response->setConnectionReused(info.connection_reused); |
| + response->setConnectionID(load_timing.socket_log_id); |
| + response->setConnectionReused(load_timing.socket_reused); |
| response->setDownloadFilePath( |
| webkit_base::FilePathToWebString(info.download_file_path)); |
| response->setExtraData(new WebURLResponseExtraDataImpl( |
| info.npn_negotiated_protocol)); |
| - const ResourceLoadTimingInfo& timing_info = info.load_timing; |
| - if (!timing_info.base_time.is_null()) { |
| + // If there's no received headers end time, don't set load timing. This is |
| + // the case for non-HTTP requests, requests that don't go over the wire, and |
| + // certain error cases. |
| + if (!load_timing.receive_headers_end.is_null()) { |
| + DCHECK(!load_timing.request_start.is_null()); |
| + |
| WebURLLoadTiming timing; |
| timing.initialize(); |
| - timing.setRequestTime((timing_info.base_ticks - TimeTicks()).InSecondsF()); |
| - timing.setProxyStart(timing_info.proxy_start); |
| - timing.setProxyEnd(timing_info.proxy_end); |
| - timing.setDNSStart(timing_info.dns_start); |
| - timing.setDNSEnd(timing_info.dns_end); |
| - timing.setConnectStart(timing_info.connect_start); |
| - timing.setConnectEnd(timing_info.connect_end); |
| - timing.setSSLStart(timing_info.ssl_start); |
| - timing.setSSLEnd(timing_info.ssl_end); |
| - timing.setSendStart(timing_info.send_start); |
| - timing.setSendEnd(timing_info.send_end); |
| - timing.setReceiveHeadersEnd(timing_info.receive_headers_end); |
| + timing.setRequestTime( |
| + (load_timing.request_start - TimeTicks()).InSecondsF()); |
| + timing.setProxyStart(TimeTicksToOffset(load_timing.request_start, |
| + load_timing.proxy_resolve_start)); |
| + timing.setProxyEnd(TimeTicksToOffset(load_timing.request_start, |
| + load_timing.proxy_resolve_end)); |
| + timing.setDNSStart(TimeTicksToOffset(load_timing.request_start, |
| + load_timing.connect_timing.dns_start)); |
| + timing.setDNSEnd(TimeTicksToOffset(load_timing.request_start, |
| + load_timing.connect_timing.dns_end)); |
| + timing.setConnectStart( |
| + TimeTicksToOffset(load_timing.request_start, |
| + load_timing.connect_timing.connect_start)); |
| + timing.setConnectEnd( |
| + TimeTicksToOffset(load_timing.request_start, |
| + load_timing.connect_timing.connect_end)); |
| + timing.setSSLStart(TimeTicksToOffset(load_timing.request_start, |
| + load_timing.connect_timing.ssl_start)); |
| + timing.setSSLEnd(TimeTicksToOffset(load_timing.request_start, |
| + load_timing.connect_timing.ssl_end)); |
| + timing.setSendStart(TimeTicksToOffset(load_timing.request_start, |
| + load_timing.send_start)); |
| + timing.setSendEnd(TimeTicksToOffset(load_timing.request_start, |
| + load_timing.send_end)); |
| + timing.setReceiveHeadersEnd( |
| + TimeTicksToOffset(load_timing.request_start, |
| + load_timing.receive_headers_end)); |
| response->setLoadTiming(timing); |
| } |