summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/browser_main.cc42
-rw-r--r--chrome/browser/browser_main.h3
-rw-r--r--chrome/renderer/render_view.cc36
-rw-r--r--net/http/http_network_session.cc8
-rw-r--r--net/http/http_network_session.h1
5 files changed, 89 insertions, 1 deletions
diff --git a/chrome/browser/browser_main.cc b/chrome/browser/browser_main.cc
index 6f23885..81e78a7 100644
--- a/chrome/browser/browser_main.cc
+++ b/chrome/browser/browser_main.cc
@@ -163,6 +163,7 @@ void BrowserMainParts::EarlyInitialization() {
ConnectionFieldTrial();
SocketTimeoutFieldTrial();
+ ProxyConnectionsFieldTrial();
SpdyFieldTrial();
InitializeSSL();
@@ -260,6 +261,47 @@ void BrowserMainParts::SocketTimeoutFieldTrial() {
}
}
+void BrowserMainParts::ProxyConnectionsFieldTrial() {
+ const FieldTrial::Probability kProxyConnectionsDivisor = 100;
+ // 25% probability
+ const FieldTrial::Probability kProxyConnectionProbability = 25;
+
+ scoped_refptr<FieldTrial> proxy_connection_trial =
+ new FieldTrial("ProxyConnectionImpact", kProxyConnectionsDivisor);
+
+ const int proxy_connections_8 =
+ proxy_connection_trial->AppendGroup("_proxy_connections_8",
+ kProxyConnectionProbability);
+ const int proxy_connections_16 =
+ proxy_connection_trial->AppendGroup("_proxy_connections_16",
+ kProxyConnectionProbability);
+ const int proxy_connections_64 =
+ proxy_connection_trial->AppendGroup("_proxy_connections_64",
+ kProxyConnectionProbability);
+
+ // This (32 connections per proxy server) is the current default value.
+ // Declaring it here allows us to easily re-assign the probability space while
+ // maintaining that the default group always has the remainder of the "share",
+ // which allows for cleaner and quicker changes down the line if needed.
+ const int proxy_connections_32 =
+ proxy_connection_trial->AppendGroup("_proxy_connections_32",
+ FieldTrial::kAllRemainingProbability);
+
+ const int proxy_connections_trial_group = proxy_connection_trial->group();
+
+ if (proxy_connections_trial_group == proxy_connections_8) {
+ net::HttpNetworkSession::set_max_sockets_per_proxy_server(8);
+ } else if (proxy_connections_trial_group == proxy_connections_16) {
+ net::HttpNetworkSession::set_max_sockets_per_proxy_server(16);
+ } else if (proxy_connections_trial_group == proxy_connections_32) {
+ net::HttpNetworkSession::set_max_sockets_per_proxy_server(32);
+ } else if (proxy_connections_trial_group == proxy_connections_64) {
+ net::HttpNetworkSession::set_max_sockets_per_proxy_server(64);
+ } else {
+ NOTREACHED();
+ }
+}
+
// When --use-spdy not set, users will be in A/B test for spdy.
// group A (npn_with_spdy): this means npn and spdy are enabled. In case server
// supports spdy, browser will use spdy.
diff --git a/chrome/browser/browser_main.h b/chrome/browser/browser_main.h
index f7a5a80..6ef2bbe 100644
--- a/chrome/browser/browser_main.h
+++ b/chrome/browser/browser_main.h
@@ -107,6 +107,9 @@ class BrowserMainParts {
// A/B test for determining a value for unused socket timeout.
void SocketTimeoutFieldTrial();
+ // A/B test for the maximum number of connections per proxy server.
+ void ProxyConnectionsFieldTrial();
+
// A/B test for spdy when --use-spdy not set.
void SpdyFieldTrial();
diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc
index 30339df..c2db5d5 100644
--- a/chrome/renderer/render_view.cc
+++ b/chrome/renderer/render_view.cc
@@ -4687,7 +4687,7 @@ void RenderView::DumpLoadHistograms() const {
}
}
-
+ // Histograms to determine effect of idle socket timeout.
static bool use_idle_socket_timeout_histogram(
FieldTrialList::Find("IdleSktToImpact") &&
!FieldTrialList::Find("IdleSktToImpact")->group_name().empty());
@@ -4721,6 +4721,40 @@ void RenderView::DumpLoadHistograms() const {
}
}
+ // Histograms to determine effect of number of connections per proxy.
+ static bool use_proxy_connection_impact_histogram(
+ FieldTrialList::Find("ProxyConnectionImpact") &&
+ !FieldTrialList::Find("ProxyConnectionImpact")->group_name().empty());
+ if (use_proxy_connection_impact_histogram) {
+ UMA_HISTOGRAM_ENUMERATION(
+ FieldTrial::MakeName("PLT.Abandoned", "ProxyConnectionImpact"),
+ abandoned_page ? 1 : 0, 2);
+ switch (load_type) {
+ case NavigationState::NORMAL_LOAD:
+ PLT_HISTOGRAM(FieldTrial::MakeName(
+ "PLT.BeginToFinish_NormalLoad", "ProxyConnectionImpact"),
+ begin_to_finish);
+ break;
+ case NavigationState::LINK_LOAD_NORMAL:
+ PLT_HISTOGRAM(FieldTrial::MakeName(
+ "PLT.BeginToFinish_LinkLoadNormal", "ProxyConnectionImpact"),
+ begin_to_finish);
+ break;
+ case NavigationState::LINK_LOAD_RELOAD:
+ PLT_HISTOGRAM(FieldTrial::MakeName(
+ "PLT.BeginToFinish_LinkLoadReload", "ProxyConnectionImpact"),
+ begin_to_finish);
+ break;
+ case NavigationState::LINK_LOAD_CACHE_STALE_OK:
+ PLT_HISTOGRAM(FieldTrial::MakeName(
+ "PLT.BeginToFinish_LinkLoadStaleOk", "ProxyConnectionImpact"),
+ begin_to_finish);
+ break;
+ default:
+ break;
+ }
+ }
+
// Histograms to determine if SDCH has an impact.
// TODO(jar): Consider removing per-link load types and the enumeration.
static bool use_sdch_histogram(FieldTrialList::Find("GlobalSdch") &&
diff --git a/net/http/http_network_session.cc b/net/http/http_network_session.cc
index 05690af..204c46a 100644
--- a/net/http/http_network_session.cc
+++ b/net/http/http_network_session.cc
@@ -145,4 +145,12 @@ void HttpNetworkSession::set_max_sockets_per_group(int socket_count) {
g_max_sockets_per_group = socket_count;
}
+// static
+void HttpNetworkSession::set_max_sockets_per_proxy_server(int socket_count) {
+ DCHECK_LT(0, socket_count);
+ DCHECK_GT(100, socket_count); // Sanity check.
+
+ g_max_sockets_per_proxy_server = socket_count;
+}
+
} // namespace net
diff --git a/net/http/http_network_session.h b/net/http/http_network_session.h
index b1c269d..fdda68d 100644
--- a/net/http/http_network_session.h
+++ b/net/http/http_network_session.h
@@ -102,6 +102,7 @@ class HttpNetworkSession : public base::RefCounted<HttpNetworkSession>,
}
static void set_max_sockets_per_group(int socket_count);
+ static void set_max_sockets_per_proxy_server(int socket_count);
#ifdef UNIT_TEST
void FlushSocketPools() {