summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/io_thread.cc20
-rw-r--r--chrome/common/chrome_switches.cc5
-rw-r--r--chrome/common/chrome_switches.h1
-rw-r--r--chrome/service/net/service_url_request_context.cc3
-rw-r--r--chrome_frame/test/test_server_test.cc3
-rw-r--r--jingle/notifier/listener/mediator_thread_impl.cc3
-rw-r--r--net/base/host_resolver.h10
-rw-r--r--net/base/host_resolver_impl.cc10
-rw-r--r--net/proxy/proxy_script_fetcher_unittest.cc3
-rw-r--r--net/socket/ssl_client_socket_unittest.cc3
-rw-r--r--net/socket/ssl_test_util.cc3
-rw-r--r--net/socket/tcp_client_socket_unittest.cc3
-rw-r--r--net/socket/tcp_pinger_unittest.cc6
-rw-r--r--net/tools/fetch/fetch_client.cc2
-rw-r--r--net/url_request/url_request_unittest.h6
-rw-r--r--webkit/tools/test_shell/test_shell_request_context.cc3
16 files changed, 65 insertions, 19 deletions
diff --git a/chrome/browser/io_thread.cc b/chrome/browser/io_thread.cc
index 590b828..b3ddabc 100644
--- a/chrome/browser/io_thread.cc
+++ b/chrome/browser/io_thread.cc
@@ -27,7 +27,25 @@ namespace {
net::HostResolver* CreateGlobalHostResolver() {
const CommandLine& command_line = *CommandLine::ForCurrentProcess();
- net::HostResolver* global_host_resolver = net::CreateSystemHostResolver();
+
+ size_t parallelism = net::HostResolver::kDefaultParallelism;
+
+ // Use the concurrency override from the command-line, if any.
+ if (command_line.HasSwitch(switches::kHostResolverParallelism)) {
+ std::string s =
+ command_line.GetSwitchValueASCII(switches::kHostResolverParallelism);
+
+ // Parse the switch (it should be a positive integer formatted as decimal).
+ int n;
+ if (StringToInt(s, &n) && n > 0) {
+ parallelism = static_cast<size_t>(n);
+ } else {
+ LOG(ERROR) << "Invalid switch for host resolver parallelism: " << s;
+ }
+ }
+
+ net::HostResolver* global_host_resolver =
+ net::CreateSystemHostResolver(parallelism);
// Determine if we should disable IPv6 support.
if (!command_line.HasSwitch(switches::kEnableIPv6)) {
diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc
index 95668b3..b78c3e7 100644
--- a/chrome/common/chrome_switches.cc
+++ b/chrome/common/chrome_switches.cc
@@ -510,7 +510,10 @@ const char kHomePage[] = "homepage";
// connection, and the endpoint host in a SOCKS proxy connection).
const char kHostRules[] = "host-rules";
-// These mappins only apply to the host resolver.
+// The maximum number of concurrent host resolve requests (i.e. DNS) to allow.
+const char kHostResolverParallelism[] = "host-resolver-parallelism";
+
+// These mappings only apply to the host resolver.
const char kHostResolverRules[] = "host-resolver-rules";
// Perform importing from another browser. The value associated with this
diff --git a/chrome/common/chrome_switches.h b/chrome/common/chrome_switches.h
index 06e2a2a..7262bde 100644
--- a/chrome/common/chrome_switches.h
+++ b/chrome/common/chrome_switches.h
@@ -152,6 +152,7 @@ extern const char kHelpShort[];
extern const char kHideIcons[];
extern const char kHomePage[];
extern const char kHostRules[];
+extern const char kHostResolverParallelism[];
extern const char kHostResolverRules[];
extern const char kImport[];
extern const char kImportFromFile[];
diff --git a/chrome/service/net/service_url_request_context.cc b/chrome/service/net/service_url_request_context.cc
index d33538b..ad45796 100644
--- a/chrome/service/net/service_url_request_context.cc
+++ b/chrome/service/net/service_url_request_context.cc
@@ -21,7 +21,8 @@ ServiceURLRequestContextGetter::ServiceURLRequestContextGetter()
}
ServiceURLRequestContext::ServiceURLRequestContext() {
- host_resolver_ = net::CreateSystemHostResolver();
+ host_resolver_ =
+ net::CreateSystemHostResolver(net::HostResolver::kDefaultParallelism);
DCHECK(g_service_process);
// TODO(sanjeevr): Change CreateSystemProxyConfigService to accept a
// MessageLoopProxy* instead of MessageLoop*.
diff --git a/chrome_frame/test/test_server_test.cc b/chrome_frame/test/test_server_test.cc
index 3e762a0..e9f3bf8 100644
--- a/chrome_frame/test/test_server_test.cc
+++ b/chrome_frame/test/test_server_test.cc
@@ -61,7 +61,8 @@ class ScopedInternet {
class URLRequestTestContext : public URLRequestContext {
public:
URLRequestTestContext() {
- host_resolver_ = net::CreateSystemHostResolver();
+ host_resolver_ =
+ net::CreateSystemHostResolver(net::HostResolver::kDefaultParallelism);
proxy_service_ = net::ProxyService::CreateNull();
ssl_config_service_ = new net::SSLConfigServiceDefaults;
http_auth_handler_factory_ = net::HttpAuthHandlerFactory::CreateDefault();
diff --git a/jingle/notifier/listener/mediator_thread_impl.cc b/jingle/notifier/listener/mediator_thread_impl.cc
index 0cf2423..402346e 100644
--- a/jingle/notifier/listener/mediator_thread_impl.cc
+++ b/jingle/notifier/listener/mediator_thread_impl.cc
@@ -171,7 +171,8 @@ void MediatorThreadImpl::DoLogin(
// TODO(akalin): Use an existing HostResolver from somewhere (maybe
// the IOThread one).
- host_resolver_ = net::CreateSystemHostResolver();
+ host_resolver_ =
+ net::CreateSystemHostResolver(net::HostResolver::kDefaultParallelism);
// Start a new pump for the login.
login_.reset();
diff --git a/net/base/host_resolver.h b/net/base/host_resolver.h
index 1e1fb0b..895ffc2 100644
--- a/net/base/host_resolver.h
+++ b/net/base/host_resolver.h
@@ -131,6 +131,11 @@ class HostResolver : public base::RefCounted<HostResolver> {
// Opaque type used to cancel a request.
typedef void* RequestHandle;
+ // This value can be passed into CreateSystemHostResolver as the
+ // |max_concurrent_resolves| parameter. It will select a default level of
+ // concurrency.
+ static const size_t kDefaultParallelism = 0;
+
// Resolves the given hostname (or IP address literal), filling out the
// |addresses| object upon success. The |info.port| parameter will be set as
// the sin(6)_port field of the sockaddr_in{6} struct. Returns OK if
@@ -238,7 +243,10 @@ class SingleRequestHostResolver {
// Creates a HostResolver implementation that queries the underlying system.
// (Except if a unit-test has changed the global HostResolverProc using
// ScopedHostResolverProc to intercept requests to the system).
-HostResolver* CreateSystemHostResolver();
+// |max_concurrent_resolves| is how many resolve requests will be allowed to
+// run in parallel. Pass HostResolver::kDefaultParallelism to choose a
+// default value.
+HostResolver* CreateSystemHostResolver(size_t max_concurrent_resolves);
} // namespace net
diff --git a/net/base/host_resolver_impl.cc b/net/base/host_resolver_impl.cc
index 9b19436..ffba57f 100644
--- a/net/base/host_resolver_impl.cc
+++ b/net/base/host_resolver_impl.cc
@@ -52,13 +52,17 @@ HostCache* CreateDefaultCache() {
} // anonymous namespace
-HostResolver* CreateSystemHostResolver() {
+HostResolver* CreateSystemHostResolver(size_t max_concurrent_resolves) {
// Maximum of 50 concurrent threads.
// TODO(eroman): Adjust this, do some A/B experiments.
- static const size_t kMaxJobs = 50u;
+ static const size_t kDefaultMaxJobs = 50u;
+
+ if (max_concurrent_resolves == HostResolver::kDefaultParallelism)
+ max_concurrent_resolves = kDefaultMaxJobs;
HostResolverImpl* resolver =
- new HostResolverImpl(NULL, CreateDefaultCache(), kMaxJobs);
+ new HostResolverImpl(NULL, CreateDefaultCache(),
+ max_concurrent_resolves);
return resolver;
}
diff --git a/net/proxy/proxy_script_fetcher_unittest.cc b/net/proxy/proxy_script_fetcher_unittest.cc
index c843739..e0e64c9 100644
--- a/net/proxy/proxy_script_fetcher_unittest.cc
+++ b/net/proxy/proxy_script_fetcher_unittest.cc
@@ -32,7 +32,8 @@ class RequestContext : public URLRequestContext {
public:
RequestContext() {
net::ProxyConfig no_proxy;
- host_resolver_ = net::CreateSystemHostResolver();
+ host_resolver_ =
+ net::CreateSystemHostResolver(net::HostResolver::kDefaultParallelism);
proxy_service_ = net::ProxyService::CreateFixed(no_proxy);
ssl_config_service_ = new net::SSLConfigServiceDefaults;
diff --git a/net/socket/ssl_client_socket_unittest.cc b/net/socket/ssl_client_socket_unittest.cc
index 68016e0..2f7526a 100644
--- a/net/socket/ssl_client_socket_unittest.cc
+++ b/net/socket/ssl_client_socket_unittest.cc
@@ -26,7 +26,8 @@ const net::SSLConfig kDefaultSSLConfig;
class SSLClientSocketTest : public PlatformTest {
public:
SSLClientSocketTest()
- : resolver_(net::CreateSystemHostResolver()),
+ : resolver_(net::CreateSystemHostResolver(
+ net::HostResolver::kDefaultParallelism)),
socket_factory_(net::ClientSocketFactory::GetDefaultFactory()) {
}
diff --git a/net/socket/ssl_test_util.cc b/net/socket/ssl_test_util.cc
index f2999f0..4fa6b9b 100644
--- a/net/socket/ssl_test_util.cc
+++ b/net/socket/ssl_test_util.cc
@@ -229,7 +229,8 @@ bool TestServerLauncher::WaitToStart(const std::string& host_name, int port) {
// Verify that the webserver is actually started.
// Otherwise tests can fail if they run faster than Python can start.
net::AddressList addr;
- scoped_refptr<net::HostResolver> resolver(net::CreateSystemHostResolver());
+ scoped_refptr<net::HostResolver> resolver(
+ net::CreateSystemHostResolver(net::HostResolver::kDefaultParallelism));
net::HostResolver::RequestInfo info(host_name, port);
int rv = resolver->Resolve(info, &addr, NULL, NULL, BoundNetLog());
if (rv != net::OK)
diff --git a/net/socket/tcp_client_socket_unittest.cc b/net/socket/tcp_client_socket_unittest.cc
index 52cdb88..638e887 100644
--- a/net/socket/tcp_client_socket_unittest.cc
+++ b/net/socket/tcp_client_socket_unittest.cc
@@ -89,7 +89,8 @@ void TCPClientSocketTest::SetUp() {
listen_port_ = port;
AddressList addr;
- scoped_refptr<HostResolver> resolver(CreateSystemHostResolver());
+ scoped_refptr<HostResolver> resolver(
+ CreateSystemHostResolver(HostResolver::kDefaultParallelism));
HostResolver::RequestInfo info("localhost", listen_port_);
int rv = resolver->Resolve(info, &addr, NULL, NULL, BoundNetLog());
CHECK_EQ(rv, OK);
diff --git a/net/socket/tcp_pinger_unittest.cc b/net/socket/tcp_pinger_unittest.cc
index 63e0045..c415ac3 100644
--- a/net/socket/tcp_pinger_unittest.cc
+++ b/net/socket/tcp_pinger_unittest.cc
@@ -65,7 +65,8 @@ void TCPPingerTest::SetUp() {
TEST_F(TCPPingerTest, Ping) {
net::AddressList addr;
- scoped_refptr<net::HostResolver> resolver(net::CreateSystemHostResolver());
+ scoped_refptr<net::HostResolver> resolver(
+ net::CreateSystemHostResolver(net::HostResolver::kDefaultParallelism));
net::HostResolver::RequestInfo info("localhost", listen_port_);
int rv = resolver->Resolve(info, &addr, NULL, NULL, net::BoundNetLog());
@@ -78,7 +79,8 @@ TEST_F(TCPPingerTest, Ping) {
TEST_F(TCPPingerTest, PingFail) {
net::AddressList addr;
- scoped_refptr<net::HostResolver> resolver(net::CreateSystemHostResolver());
+ scoped_refptr<net::HostResolver> resolver(
+ net::CreateSystemHostResolver(net::HostResolver::kDefaultParallelism));
// "Kill" "server"
listen_sock_ = NULL;
diff --git a/net/tools/fetch/fetch_client.cc b/net/tools/fetch/fetch_client.cc
index 9e2a21c..8863dd7 100644
--- a/net/tools/fetch/fetch_client.cc
+++ b/net/tools/fetch/fetch_client.cc
@@ -133,7 +133,7 @@ int main(int argc, char**argv) {
MessageLoop loop(MessageLoop::TYPE_IO);
scoped_refptr<net::HostResolver> host_resolver(
- net::CreateSystemHostResolver());
+ net::CreateSystemHostResolver(net::HostResolver::kDefaultParallelism));
scoped_refptr<net::ProxyService> proxy_service(
net::ProxyService::CreateNull());
diff --git a/net/url_request/url_request_unittest.h b/net/url_request/url_request_unittest.h
index 0dfa766..f8fee49 100644
--- a/net/url_request/url_request_unittest.h
+++ b/net/url_request/url_request_unittest.h
@@ -131,13 +131,15 @@ class TestCookiePolicy : public net::CookiePolicy {
class TestURLRequestContext : public URLRequestContext {
public:
TestURLRequestContext() {
- host_resolver_ = net::CreateSystemHostResolver();
+ host_resolver_ =
+ net::CreateSystemHostResolver(net::HostResolver::kDefaultParallelism);
proxy_service_ = net::ProxyService::CreateNull();
Init();
}
explicit TestURLRequestContext(const std::string& proxy) {
- host_resolver_ = net::CreateSystemHostResolver();
+ host_resolver_ =
+ net::CreateSystemHostResolver(net::HostResolver::kDefaultParallelism);
net::ProxyConfig proxy_config;
proxy_config.proxy_rules().ParseFromString(proxy);
proxy_service_ = net::ProxyService::CreateFixed(proxy_config);
diff --git a/webkit/tools/test_shell/test_shell_request_context.cc b/webkit/tools/test_shell/test_shell_request_context.cc
index 1d9a6030..fb3be4c 100644
--- a/webkit/tools/test_shell/test_shell_request_context.cc
+++ b/webkit/tools/test_shell/test_shell_request_context.cc
@@ -57,7 +57,8 @@ void TestShellRequestContext::Init(
scoped_ptr<net::ProxyConfigService> proxy_config_service(
net::ProxyService::CreateSystemProxyConfigService(NULL, NULL));
#endif
- host_resolver_ = net::CreateSystemHostResolver();
+ host_resolver_ =
+ net::CreateSystemHostResolver(net::HostResolver::kDefaultParallelism);
proxy_service_ = net::ProxyService::Create(proxy_config_service.release(),
false, 0, NULL, NULL, NULL);
ssl_config_service_ = net::SSLConfigService::CreateSystemSSLConfigService();