diff options
-rw-r--r-- | chrome/browser/io_thread.cc | 20 | ||||
-rw-r--r-- | chrome/common/chrome_switches.cc | 5 | ||||
-rw-r--r-- | chrome/common/chrome_switches.h | 1 | ||||
-rw-r--r-- | chrome/service/net/service_url_request_context.cc | 3 | ||||
-rw-r--r-- | chrome_frame/test/test_server_test.cc | 3 | ||||
-rw-r--r-- | jingle/notifier/listener/mediator_thread_impl.cc | 3 | ||||
-rw-r--r-- | net/base/host_resolver.h | 10 | ||||
-rw-r--r-- | net/base/host_resolver_impl.cc | 10 | ||||
-rw-r--r-- | net/proxy/proxy_script_fetcher_unittest.cc | 3 | ||||
-rw-r--r-- | net/socket/ssl_client_socket_unittest.cc | 3 | ||||
-rw-r--r-- | net/socket/ssl_test_util.cc | 3 | ||||
-rw-r--r-- | net/socket/tcp_client_socket_unittest.cc | 3 | ||||
-rw-r--r-- | net/socket/tcp_pinger_unittest.cc | 6 | ||||
-rw-r--r-- | net/tools/fetch/fetch_client.cc | 2 | ||||
-rw-r--r-- | net/url_request/url_request_unittest.h | 6 | ||||
-rw-r--r-- | webkit/tools/test_shell/test_shell_request_context.cc | 3 |
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(); |