diff options
author | szym@chromium.org <szym@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-29 18:59:16 +0000 |
---|---|---|
committer | szym@chromium.org <szym@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-29 18:59:16 +0000 |
commit | 62e86ba6b589323f70fb435d456d241018db18d3 (patch) | |
tree | 9e3404d611939590e9eea27150f6c928584cb8aa | |
parent | 96ca5d7e7603d43da25c3cc0466902816366f7a0 (diff) | |
download | chromium_src-62e86ba6b589323f70fb435d456d241018db18d3.zip chromium_src-62e86ba6b589323f70fb435d456d241018db18d3.tar.gz chromium_src-62e86ba6b589323f70fb435d456d241018db18d3.tar.bz2 |
[net] Add Net.UnspecResolvedIPv6 to measure if getaddrinfo resolves IPv6 addresses.
Assuming that "www.google.com" has IPv6 addresses, count the "network sessions"
(in between IP address changes) during which we asked getaddrinfo for AF_UNSPEC family
but have not received any IPv6 addresses. This will tells us how many of the times
Net.IPv6Status = IPV6_GLOBAL_ADDRESS_PRESENT is wrong.
BUG=171549
Review URL: https://codereview.chromium.org/12051052
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@179374 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | net/base/host_resolver_impl.cc | 20 | ||||
-rw-r--r-- | net/base/host_resolver_impl.h | 8 |
2 files changed, 24 insertions, 4 deletions
diff --git a/net/base/host_resolver_impl.cc b/net/base/host_resolver_impl.cc index 97522b4..ba59569 100644 --- a/net/base/host_resolver_impl.cc +++ b/net/base/host_resolver_impl.cc @@ -1405,6 +1405,20 @@ class HostResolverImpl::Job : public PrioritizedDispatcher::Job { const AddressList& addr_list) { DCHECK(is_proc_running()); + if (!resolver_->resolved_known_ipv6_hostname_ && + net_error == OK && + key_.address_family == ADDRESS_FAMILY_UNSPECIFIED) { + if (key_.hostname == "www.google.com") { + resolver_->resolved_known_ipv6_hostname_ = true; + bool got_ipv6_address = false; + for (size_t i = 0; i < addr_list.size(); ++i) { + if (addr_list[i].GetFamily() == ADDRESS_FAMILY_IPV6) + got_ipv6_address = true; + } + UMA_HISTOGRAM_BOOLEAN("Net.UnspecResolvedIPv6", got_ipv6_address); + } + } + if (dns_task_error_ != OK) { base::TimeDelta duration = base::TimeTicks::Now() - start_time; if (net_error == OK) { @@ -1659,14 +1673,15 @@ HostResolverImpl::HostResolverImpl( dispatcher_(job_limits), max_queued_jobs_(job_limits.total_jobs * 100u), proc_params_(proc_params), + net_log_(net_log), default_address_family_(ADDRESS_FAMILY_UNSPECIFIED), weak_ptr_factory_(this), probe_weak_ptr_factory_(this), received_dns_config_(false), num_dns_failures_(0), ipv6_probe_monitoring_(false), - additional_resolver_flags_(0), - net_log_(net_log) { + resolved_known_ipv6_hostname_(false), + additional_resolver_flags_(0) { DCHECK_GE(dispatcher_.num_priorities(), static_cast<size_t>(NUM_PRIORITIES)); @@ -2059,6 +2074,7 @@ void HostResolverImpl::TryServingAllJobsFromHosts() { } void HostResolverImpl::OnIPAddressChanged() { + resolved_known_ipv6_hostname_ = false; // Abandon all ProbeJobs. probe_weak_ptr_factory_.InvalidateWeakPtrs(); if (cache_.get()) diff --git a/net/base/host_resolver_impl.h b/net/base/host_resolver_impl.h index d68d6ab..29a6d67 100644 --- a/net/base/host_resolver_impl.h +++ b/net/base/host_resolver_impl.h @@ -248,6 +248,8 @@ class NET_EXPORT HostResolverImpl // Parameters for ProcTask. ProcTaskParams proc_params_; + NetLog* net_log_; + // Address family to use when the request doesn't specify one. AddressFamily default_address_family_; @@ -270,11 +272,13 @@ class NET_EXPORT HostResolverImpl // of the IPv6 probe job are ignored. bool ipv6_probe_monitoring_; + // True iff ProcTask has successfully resolved a hostname known to have IPv6 + // addresses using ADDRESS_FAMILY_UNSPECIFIED. Reset on IP address change. + bool resolved_known_ipv6_hostname_; + // Any resolver flags that should be added to a request by default. HostResolverFlags additional_resolver_flags_; - NetLog* net_log_; - DISALLOW_COPY_AND_ASSIGN(HostResolverImpl); }; |