summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormbelshe@chromium.org <mbelshe@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-10 22:59:07 +0000
committermbelshe@chromium.org <mbelshe@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-10 22:59:07 +0000
commit972ebdffe25655e7eb3c3e9553f8516b38fedb51 (patch)
treec53af37198429f9ceb9b53e5ef7b0db0bb853acc
parenteefb1d18b254aa26c65bff7135071fb69804e1a4 (diff)
downloadchromium_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.cc2
-rw-r--r--chrome/common/render_messages.h8
-rw-r--r--chrome/renderer/navigation_state.h9
-rwxr-xr-xchrome/renderer/render_view.cc45
-rw-r--r--net/url_request/url_request.h5
-rw-r--r--webkit/glue/resource_loader_bridge.cc1
-rw-r--r--webkit/glue/resource_loader_bridge.h5
-rw-r--r--webkit/glue/weburlloader_impl.cc1
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)