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

Unified Diff: webkit/glue/weburlloader_impl.cc

Issue 12094085: LoadTiming in net part 7: Hooking it all up (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Sync Created 7 years, 10 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
Index: webkit/glue/weburlloader_impl.cc
===================================================================
--- webkit/glue/weburlloader_impl.cc (revision 184957)
+++ 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;
+ 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(
darin (slow to review) 2013/02/28 16:57:35 nit: How about breaking this out into its own help
mmenke 2013/02/28 17:36:55 Done.
+ (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);
}
« content/common/resource_dispatcher.cc ('K') | « webkit/glue/resource_loader_bridge.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698