From 5fbe95affc8eeed93c678b1d271f64dcc4dd919b Mon Sep 17 00:00:00 2001 From: Ebrahem Qassem Date: Sun, 20 Nov 2011 14:57:09 +0200 Subject: 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 --- net/base/host_resolver_impl.cc | 49 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 43 insertions(+), 6 deletions(-) (limited to 'net/base/host_resolver_impl.cc') 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:"<