diff options
author | mbelshe@chromium.org <mbelshe@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-10 22:59:07 +0000 |
---|---|---|
committer | mbelshe@chromium.org <mbelshe@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-10 22:59:07 +0000 |
commit | 972ebdffe25655e7eb3c3e9553f8516b38fedb51 (patch) | |
tree | c53af37198429f9ceb9b53e5ef7b0db0bb853acc | |
parent | eefb1d18b254aa26c65bff7135071fb69804e1a4 (diff) | |
download | chromium_src-972ebdffe25655e7eb3c3e9553f8516b38fedb51.zip chromium_src-972ebdffe25655e7eb3c3e9553f8516b38fedb51.tar.gz chromium_src-972ebdffe25655e7eb3c3e9553f8516b38fedb51.tar.bz2 |
Track whether a page was loaded via a proxy so that we can
evaluate performance.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/2764004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@49468 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/renderer_host/resource_dispatcher_host.cc | 2 | ||||
-rw-r--r-- | chrome/common/render_messages.h | 8 | ||||
-rw-r--r-- | chrome/renderer/navigation_state.h | 9 | ||||
-rwxr-xr-x | chrome/renderer/render_view.cc | 45 | ||||
-rw-r--r-- | net/url_request/url_request.h | 5 | ||||
-rw-r--r-- | webkit/glue/resource_loader_bridge.cc | 1 | ||||
-rw-r--r-- | webkit/glue/resource_loader_bridge.h | 5 | ||||
-rw-r--r-- | webkit/glue/weburlloader_impl.cc | 1 |
8 files changed, 63 insertions, 13 deletions
diff --git a/chrome/browser/renderer_host/resource_dispatcher_host.cc b/chrome/browser/renderer_host/resource_dispatcher_host.cc index 6d3b986..8aa269d 100644 --- a/chrome/browser/renderer_host/resource_dispatcher_host.cc +++ b/chrome/browser/renderer_host/resource_dispatcher_host.cc @@ -164,6 +164,8 @@ void PopulateResourceResponse(URLRequest* request, response->response_head.was_fetched_via_spdy = request->was_fetched_via_spdy(); response->response_head.was_npn_negotiated = request->was_npn_negotiated(); + response->response_head.was_fetched_via_proxy = + request->was_fetched_via_proxy(); appcache::AppCacheInterceptor::GetExtraResponseInfo( request, &response->response_head.appcache_id, diff --git a/chrome/common/render_messages.h b/chrome/common/render_messages.h index b85e3dca..6cddbc6 100644 --- a/chrome/common/render_messages.h +++ b/chrome/common/render_messages.h @@ -1350,6 +1350,7 @@ struct ParamTraits<webkit_glue::ResourceLoaderBridge::ResponseInfo> { WriteParam(m, p.appcache_manifest_url); WriteParam(m, p.was_fetched_via_spdy); WriteParam(m, p.was_npn_negotiated); + WriteParam(m, p.was_fetched_via_proxy); } static bool Read(const Message* m, void** iter, param_type* r) { return @@ -1363,7 +1364,8 @@ struct ParamTraits<webkit_glue::ResourceLoaderBridge::ResponseInfo> { ReadParam(m, iter, &r->appcache_id) && ReadParam(m, iter, &r->appcache_manifest_url) && ReadParam(m, iter, &r->was_fetched_via_spdy) && - ReadParam(m, iter, &r->was_npn_negotiated); + ReadParam(m, iter, &r->was_npn_negotiated) && + ReadParam(m, iter, &r->was_fetched_via_proxy); } static void Log(const param_type& p, std::wstring* l) { l->append(L"("); @@ -1386,8 +1388,10 @@ struct ParamTraits<webkit_glue::ResourceLoaderBridge::ResponseInfo> { LogParam(p.appcache_manifest_url, l); l->append(L", "); LogParam(p.was_fetched_via_spdy, l); - l->append(L","); + l->append(L", "); LogParam(p.was_npn_negotiated, l); + l->append(L", "); + LogParam(p.was_fetched_via_proxy, l); l->append(L")"); } }; diff --git a/chrome/renderer/navigation_state.h b/chrome/renderer/navigation_state.h index 8d762aa..ef3a54e 100644 --- a/chrome/renderer/navigation_state.h +++ b/chrome/renderer/navigation_state.h @@ -223,6 +223,11 @@ class NavigationState : public WebKit::WebDataSource::ExtraData { void set_was_npn_negotiated(bool value) { was_npn_negotiated_ = value; } bool was_npn_negotiated() const { return was_npn_negotiated_; } + void set_was_fetched_via_proxy(bool value) { + was_fetched_via_proxy_ = value; + } + bool was_fetched_via_proxy() const { return was_fetched_via_proxy_; } + // Whether the frame text contents was translated to a different language. void set_was_translated(bool value) { was_translated_ = value; } bool was_translated() const { return was_translated_; } @@ -247,6 +252,7 @@ class NavigationState : public WebKit::WebDataSource::ExtraData { user_script_idle_scheduler_(NULL), was_fetched_via_spdy_(false), was_npn_negotiated_(false), + was_fetched_via_proxy_(false), was_translated_(false) { } @@ -278,9 +284,8 @@ class NavigationState : public WebKit::WebDataSource::ExtraData { scoped_ptr<UserScriptIdleScheduler> user_script_idle_scheduler_; bool was_fetched_via_spdy_; - bool was_npn_negotiated_; - + bool was_fetched_via_proxy_; bool was_translated_; DISALLOW_COPY_AND_ASSIGN(NavigationState); diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc index 563fdf6..208dc79 100755 --- a/chrome/renderer/render_view.cc +++ b/chrome/renderer/render_view.cc @@ -2970,15 +2970,10 @@ void RenderView::didReceiveResponse( NavigationState::FromDataSource(frame->provisionalDataSource()); CHECK(navigation_state); - // Record that this was a page loaded over SPDY. - if (response.wasFetchedViaSPDY()) { - navigation_state->set_was_fetched_via_spdy(true); - } - - // Record that npn protocol was negotiated when fetching this page. - if (response.wasNpnNegotiated()) { - navigation_state->set_was_npn_negotiated(true); - } + // Record page load flags. + navigation_state->set_was_fetched_via_spdy(response.wasFetchedViaSPDY()); + navigation_state->set_was_npn_negotiated(response.wasNpnNegotiated()); + navigation_state->set_was_fetched_via_proxy(response.wasFetchedViaProxy()); // Consider loading an alternate error page for 404 responses. if (response.httpStatusCode() != 404) @@ -4706,6 +4701,38 @@ void RenderView::DumpLoadHistograms() const { finish - request, kBeginToFinishMin, kBeginToFinishMax, kBeginToFinishBucketCount); + // Record page load time and abandonment rates for proxy cases. + GURL url = GURL(main_frame->url()); + if (navigation_state->was_fetched_via_proxy()) { + if (url.SchemeIs("https")) { + UMA_HISTOGRAM_CUSTOM_TIMES("Renderer4.StartToFinish.Proxy.https", + finish - start, kBeginToFinishMin, + kBeginToFinishMax, kBeginToFinishBucketCount); + UMA_HISTOGRAM_ENUMERATION("Renderer4.Abandoned.Proxy.https", + abandoned_page ? 1 : 0, 2); + } else { + UMA_HISTOGRAM_CUSTOM_TIMES("Renderer4.StartToFinish.Proxy.http", + finish - start, kBeginToFinishMin, + kBeginToFinishMax, kBeginToFinishBucketCount); + UMA_HISTOGRAM_ENUMERATION("Renderer4.Abandoned.Proxy.http", + abandoned_page ? 1 : 0, 2); + } + } else { + if (url.SchemeIs("https")) { + UMA_HISTOGRAM_CUSTOM_TIMES("Renderer4.StartToFinish.NoProxy.https", + finish - start, kBeginToFinishMin, + kBeginToFinishMax, kBeginToFinishBucketCount); + UMA_HISTOGRAM_ENUMERATION("Renderer4.Abandoned.NoProxy.https", + abandoned_page ? 1 : 0, 2); + } else { + UMA_HISTOGRAM_CUSTOM_TIMES("Renderer4.StartToFinish.NoProxy.http", + finish - start, kBeginToFinishMin, + kBeginToFinishMax, kBeginToFinishBucketCount); + UMA_HISTOGRAM_ENUMERATION("Renderer4.Abandoned.NoProxy.http", + abandoned_page ? 1 : 0, 2); + } + } + UMA_HISTOGRAM_MEDIUM_TIMES("Renderer4.CommitToFinish", finish - commit); if (!first_paint.is_null()) { diff --git a/net/url_request/url_request.h b/net/url_request/url_request.h index 2a7331a..aff01c7 100644 --- a/net/url_request/url_request.h +++ b/net/url_request/url_request.h @@ -382,6 +382,11 @@ class URLRequest { return response_info_.was_npn_negotiated; } + // Returns true if the URLRequest was delivered through a proxy. + bool was_fetched_via_proxy() const { + return response_info_.was_fetched_via_proxy; + } + // Get all response headers, as a HttpResponseHeaders object. See comments // in HttpResponseHeaders class as to the format of the data. net::HttpResponseHeaders* response_headers() const; diff --git a/webkit/glue/resource_loader_bridge.cc b/webkit/glue/resource_loader_bridge.cc index 124fd61..1e41f22 100644 --- a/webkit/glue/resource_loader_bridge.cc +++ b/webkit/glue/resource_loader_bridge.cc @@ -26,6 +26,7 @@ ResourceLoaderBridge::ResponseInfo::ResponseInfo() { appcache_id = appcache::kNoCacheId; was_fetched_via_spdy = false; was_npn_negotiated = false; + was_fetched_via_proxy = false; } ResourceLoaderBridge::ResponseInfo::~ResponseInfo() { diff --git a/webkit/glue/resource_loader_bridge.h b/webkit/glue/resource_loader_bridge.h index b78e3a5..7c19af0 100644 --- a/webkit/glue/resource_loader_bridge.h +++ b/webkit/glue/resource_loader_bridge.h @@ -127,6 +127,11 @@ class ResourceLoaderBridge { // True if the response was delivered after NPN is negotiated. bool was_npn_negotiated; + + // True if the response was fetched via an explicit proxy (as opposed to a + // transparent proxy). The proxy could be any type of proxy, HTTP or SOCKS. + // Note: we cannot tell if a transparent proxy may have been involved. + bool was_fetched_via_proxy; }; // See the SyncLoad method declared below. (The name of this struct is not diff --git a/webkit/glue/weburlloader_impl.cc b/webkit/glue/weburlloader_impl.cc index b2d936c..4261f0f 100644 --- a/webkit/glue/weburlloader_impl.cc +++ b/webkit/glue/weburlloader_impl.cc @@ -172,6 +172,7 @@ void PopulateURLResponse( response->setAppCacheManifestURL(info.appcache_manifest_url); response->setWasFetchedViaSPDY(info.was_fetched_via_spdy); response->setWasNpnNegotiated(info.was_npn_negotiated); + response->setWasFetchedViaProxy(info.was_fetched_via_proxy); const net::HttpResponseHeaders* headers = info.headers; if (!headers) |