diff options
author | Ebrahem Qassem <ekassem@codeaurora.org> | 2011-11-20 14:57:09 +0200 |
---|---|---|
committer | Steve Kondik <shade@chemlab.org> | 2012-09-11 13:20:30 -0700 |
commit | 5fbe95affc8eeed93c678b1d271f64dcc4dd919b (patch) | |
tree | 053d8358e76befa6fd95e7cef8319045e534167f /net/base/host_resolver_impl.cc | |
parent | a75b259c30d54752a0d42804631bcf309b381f90 (diff) | |
download | external_chromium-5fbe95affc8eeed93c678b1d271f64dcc4dd919b.zip external_chromium-5fbe95affc8eeed93c678b1d271f64dcc4dd919b.tar.gz external_chromium-5fbe95affc8eeed93c678b1d271f64dcc4dd919b.tar.bz2 |
net: networking optimizations
features:
- early connection
- memory cache
- caching of redirection
- request queue priority
- closing unused sockets
- SHUTR
- fin aggregation
- object prefetch
- dns host name prioritization
Change-Id: Ief90b8206ba48115eaeb12d554424d65f36427ac
Diffstat (limited to 'net/base/host_resolver_impl.cc')
-rw-r--r-- | net/base/host_resolver_impl.cc | 49 |
1 files changed, 43 insertions, 6 deletions
diff --git a/net/base/host_resolver_impl.cc b/net/base/host_resolver_impl.cc index 1f33369..7fd04fc 100644 --- a/net/base/host_resolver_impl.cc +++ b/net/base/host_resolver_impl.cc @@ -1,4 +1,5 @@ // Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2011, Code Aurora Forum. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -35,7 +36,6 @@ #include "net/base/net_errors.h" #include "net/base/net_log.h" #include "net/base/net_util.h" - #if defined(OS_WIN) #include "net/base/winsock_init.h" #endif @@ -74,6 +74,17 @@ HostCache* CreateDefaultCache() { HostResolver* CreateSystemHostResolver(size_t max_concurrent_resolves, HostResolverProc* resolver_proc, NetLog* net_log) { +return CreateSystemHostResolver(max_concurrent_resolves, + resolver_proc, + net_log, + NULL); +} + +HostResolver* CreateSystemHostResolver(size_t max_concurrent_resolves, + HostResolverProc* resolver_proc, + NetLog* net_log, + MessageLoop* net_notification_messageloop + ) { // Maximum of 8 concurrent resolver threads. // Some routers (or resolvers) appear to start to provide host-not-found if // too many simultaneous resolutions are pending. This number needs to be @@ -85,7 +96,7 @@ HostResolver* CreateSystemHostResolver(size_t max_concurrent_resolves, HostResolverImpl* resolver = new HostResolverImpl(resolver_proc, CreateDefaultCache(), - max_concurrent_resolves, net_log); + max_concurrent_resolves, net_log,net_notification_messageloop); return resolver; } @@ -904,7 +915,9 @@ HostResolverImpl::HostResolverImpl( HostResolverProc* resolver_proc, HostCache* cache, size_t max_jobs, - NetLog* net_log) + NetLog* net_log, + MessageLoop* net_notification_messageloop + ) : cache_(cache), max_jobs_(max_jobs), next_request_id_(0), @@ -914,7 +927,10 @@ HostResolverImpl::HostResolverImpl( shutdown_(false), ipv6_probe_monitoring_(false), additional_resolver_flags_(0), - net_log_(net_log) { + net_log_(net_log), + net_notification_messageloop_(net_notification_messageloop), + resolverext_(NULL) +{ DCHECK_GT(max_jobs, 0u); // It is cumbersome to expose all of the constraints in the constructor, @@ -928,7 +944,17 @@ HostResolverImpl::HostResolverImpl( if (HaveOnlyLoopbackAddresses()) additional_resolver_flags_ |= HOST_RESOLVER_LOOPBACK_ONLY; #endif - NetworkChangeNotifier::AddIPAddressObserver(this); + + //register to network notifications via the current thread message loop (if exsits) + //or use the message loop provided in the constructor parameter + if (NULL==net_notification_messageloop_) { + net_notification_messageloop_ = MessageLoop::current(); + } + //add this class as observer for NetworkChangeNotifier + if (net_notification_messageloop_) { + net_notification_messageloop_->PostTask(FROM_HERE, + NewRunnableFunction( &NetworkChangeNotifier::AddIPAddressObserver,this)); + } } HostResolverImpl::~HostResolverImpl() { @@ -942,7 +968,10 @@ HostResolverImpl::~HostResolverImpl() { if (cur_completing_job_) cur_completing_job_->Cancel(); - NetworkChangeNotifier::RemoveIPAddressObserver(this); + if (net_notification_messageloop_) { + net_notification_messageloop_->PostTask(FROM_HERE, + NewRunnableFunction( &NetworkChangeNotifier::RemoveIPAddressObserver,this)); + } // Delete the job pools. for (size_t i = 0u; i < arraysize(job_pools_); ++i) @@ -1471,6 +1500,14 @@ void HostResolverImpl::OnIPAddressChanged() { #endif AbortAllInProgressJobs(); // |this| may be deleted inside AbortAllInProgressJobs(). + + if (resolverext_) { + resolverext_->Resolve(); + } } +void HostResolverImpl::SetResolverExt(HostnameResolverExt* resolverext) { + LOG(INFO)<<"HostResolverImpl::SetPreresolver preresolver:"<<resolverext; + resolverext_ = resolverext; + } } // namespace net |