diff options
| -rw-r--r-- | chrome/browser/browser_main.cc | 17 | ||||
| -rw-r--r-- | net/http/http_network_session.cc | 9 | ||||
| -rw-r--r-- | net/http/http_network_session.h | 1 |
3 files changed, 23 insertions, 4 deletions
diff --git a/chrome/browser/browser_main.cc b/chrome/browser/browser_main.cc index 7c35799..79f3f0d 100644 --- a/chrome/browser/browser_main.cc +++ b/chrome/browser/browser_main.cc @@ -165,6 +165,8 @@ BrowserMainParts::~BrowserMainParts() { void BrowserMainParts::EarlyInitialization() { PreEarlyInitialization(); + // Note: make sure to call ConnectionFieldTrial() before + // ProxyConnectionsFieldTrial(). ConnectionFieldTrial(); SocketTimeoutFieldTrial(); ProxyConnectionsFieldTrial(); @@ -273,9 +275,18 @@ void BrowserMainParts::ProxyConnectionsFieldTrial() { scoped_refptr<FieldTrial> proxy_connection_trial = new FieldTrial("ProxyConnectionImpact", kProxyConnectionsDivisor); - const int proxy_connections_8 = - proxy_connection_trial->AppendGroup("_proxy_connections_8", - kProxyConnectionProbability); + // The number of max sockets per group cannot be greater than the max number + // of sockets per proxy server. Consequently, we eliminate the + // |proxy_connections_8| trial group if we do happen to pass this lower bound + // (which may vary due to the existence of field trials). This leaves us with + // [16, 32, 64] to choose from. Otherwise, we have a set of four values: + // [8, 16, 32, 64]. + int proxy_connections_8 = -1; + if (net::HttpNetworkSession::max_sockets_per_group() <= 8) { + proxy_connections_8 = + proxy_connection_trial->AppendGroup("_proxy_connections_8", + kProxyConnectionProbability); + } const int proxy_connections_16 = proxy_connection_trial->AppendGroup("_proxy_connections_16", kProxyConnectionProbability); diff --git a/net/http/http_network_session.cc b/net/http/http_network_session.cc index 204c46a..e49d66b 100644 --- a/net/http/http_network_session.cc +++ b/net/http/http_network_session.cc @@ -138,6 +138,11 @@ HttpNetworkSession::GetSocketPoolForSSLWithProxy( } // static +int HttpNetworkSession::max_sockets_per_group() { + return g_max_sockets_per_group; +} + +// static void HttpNetworkSession::set_max_sockets_per_group(int socket_count) { DCHECK_LT(0, socket_count); // The following is a sanity check... but we should NEVER be near this value. @@ -149,7 +154,9 @@ void HttpNetworkSession::set_max_sockets_per_group(int socket_count) { void HttpNetworkSession::set_max_sockets_per_proxy_server(int socket_count) { DCHECK_LT(0, socket_count); DCHECK_GT(100, socket_count); // Sanity check. - + // Assert this case early on. The max number of sockets per group cannot + // exceed the max number of sockets per proxy server. + DCHECK_LE(g_max_sockets_per_group, socket_count); g_max_sockets_per_proxy_server = socket_count; } diff --git a/net/http/http_network_session.h b/net/http/http_network_session.h index fdda68d..650a831 100644 --- a/net/http/http_network_session.h +++ b/net/http/http_network_session.h @@ -101,6 +101,7 @@ class HttpNetworkSession : public base::RefCounted<HttpNetworkSession>, return network_delegate_; } + static int max_sockets_per_group(); static void set_max_sockets_per_group(int socket_count); static void set_max_sockets_per_proxy_server(int socket_count); |
