Skip to content

Commit

Permalink
Implemented AsyncHostResolver -- asynchronous HostResolver.
Browse files Browse the repository at this point in the history
BUG=60149
TEST=net_unittests --gtest_filter="AsyncHostResolver*"

Review URL: http://codereview.chromium.org/7466011

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@93313 0039d316-1c4b-4281-b951-d872f2087c98
  • Loading branch information
agayev@chromium.org committed Jul 21, 2011
1 parent 5a138d8 commit bae82ae
Show file tree
Hide file tree
Showing 15 changed files with 1,583 additions and 212 deletions.
19 changes: 18 additions & 1 deletion chrome/browser/io_thread.cc
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
#include "content/browser/gpu/gpu_process_host.h"
#include "content/browser/in_process_webkit/indexed_db_key_utility_client.h"
#include "content/common/url_fetcher.h"
#include "net/base/async_host_resolver.h"
#include "net/base/cert_verifier.h"
#include "net/base/cookie_monster.h"
#include "net/base/dnsrr_resolver.h"
Expand Down Expand Up @@ -160,8 +161,24 @@ net::HostResolver* CreateGlobalHostResolver(net::NetLog* net_log) {
}
}

net::HostResolver* global_host_resolver =
net::HostResolver* global_host_resolver = NULL;
if (command_line.HasSwitch(switches::kDnsServer)) {
std::string dns_ip_string =
command_line.GetSwitchValueASCII(switches::kDnsServer);
net::IPAddressNumber dns_ip_number;
if (net::ParseIPLiteralToNumber(dns_ip_string, &dns_ip_number)) {
global_host_resolver =
net::CreateAsyncHostResolver(parallelism, dns_ip_number, net_log);
} else {
LOG(ERROR) << "Invalid IP address specified for --dns-server: "
<< dns_ip_string;
}
}

if (!global_host_resolver) {
global_host_resolver =
net::CreateSystemHostResolver(parallelism, retry_attempts, net_log);
}

// Determine if we should disable IPv6 support.
if (!command_line.HasSwitch(switches::kEnableIPv6)) {
Expand Down
29 changes: 29 additions & 0 deletions chrome/browser/net/passive_log_collector.cc
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,8 @@ PassiveLogCollector::PassiveLogCollector()
trackers_[net::NetLog::SOURCE_EXPONENTIAL_BACKOFF_THROTTLING] =
&exponential_backoff_throttling_tracker_;
trackers_[net::NetLog::SOURCE_DNS_TRANSACTION] = &dns_transaction_tracker_;
trackers_[net::NetLog::SOURCE_ASYNC_HOST_RESOLVER_REQUEST] =
&async_host_resolver_request_tracker_;
// Make sure our mapping is up-to-date.
for (size_t i = 0; i < arraysize(trackers_); ++i)
DCHECK(trackers_[i]) << "Unhandled SourceType: " << i;
Expand Down Expand Up @@ -695,3 +697,30 @@ PassiveLogCollector::DnsTransactionTracker::DoAddEntry(
}
return ACTION_NONE;
}

//----------------------------------------------------------------------------
// AsyncHostResolverRequestTracker
//----------------------------------------------------------------------------

const size_t
PassiveLogCollector::AsyncHostResolverRequestTracker::kMaxNumSources = 100;

const size_t
PassiveLogCollector::AsyncHostResolverRequestTracker::kMaxGraveyardSize = 15;

PassiveLogCollector::
AsyncHostResolverRequestTracker::AsyncHostResolverRequestTracker()
: SourceTracker(kMaxNumSources, kMaxGraveyardSize, NULL) {
}

PassiveLogCollector::SourceTracker::Action
PassiveLogCollector::AsyncHostResolverRequestTracker::DoAddEntry(
const ChromeNetLog::Entry& entry,
SourceInfo* out_info) {
AddEntryToSourceInfo(entry, out_info);
if (entry.type == net::NetLog::TYPE_ASYNC_HOST_RESOLVER_REQUEST &&
entry.phase == net::NetLog::PHASE_END) {
return ACTION_MOVE_TO_GRAVEYARD;
}
return ACTION_NONE;
}
16 changes: 16 additions & 0 deletions chrome/browser/net/passive_log_collector.h
Original file line number Diff line number Diff line change
Expand Up @@ -369,6 +369,21 @@ class PassiveLogCollector : public ChromeNetLog::ThreadSafeObserver {
DISALLOW_COPY_AND_ASSIGN(DnsTransactionTracker);
};

// Tracks the log entries for the last seen SOURCE_ASYNC_HOST_RESOLVER_REQUEST
class AsyncHostResolverRequestTracker : public SourceTracker {
public:
static const size_t kMaxNumSources;
static const size_t kMaxGraveyardSize;

AsyncHostResolverRequestTracker();

private:
virtual Action DoAddEntry(const ChromeNetLog::Entry& entry,
SourceInfo* out_info);

DISALLOW_COPY_AND_ASSIGN(AsyncHostResolverRequestTracker);
};

PassiveLogCollector();
virtual ~PassiveLogCollector();

Expand Down Expand Up @@ -410,6 +425,7 @@ class PassiveLogCollector : public ChromeNetLog::ThreadSafeObserver {
HttpStreamJobTracker http_stream_job_tracker_;
ExponentialBackoffThrottlingTracker exponential_backoff_throttling_tracker_;
DnsTransactionTracker dns_transaction_tracker_;
AsyncHostResolverRequestTracker async_host_resolver_request_tracker_;

// This array maps each NetLog::SourceType to one of the tracker instances
// defined above. Use of this array avoid duplicating the list of trackers
Expand Down
1 change: 1 addition & 0 deletions chrome/browser/resources/net_internals/sourceentry.js
Original file line number Diff line number Diff line change
Expand Up @@ -321,6 +321,7 @@ SourceEntry.prototype.getDescription = function() {
description = connectJobSourceEntry.getDescription();
}
break;
case LogSourceType.ASYNC_HOST_RESOLVER_REQUEST:
case LogSourceType.DNS_TRANSACTION:
description = e.params.hostname;
break;
Expand Down
Loading

0 comments on commit bae82ae

Please sign in to comment.