diff options
author | pauljensen@chromium.org <pauljensen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-13 18:24:24 +0000 |
---|---|---|
committer | pauljensen@chromium.org <pauljensen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-13 18:24:24 +0000 |
commit | 3419fa77a302e13a42f783c2466c2fde91d4cd95 (patch) | |
tree | bd1ddd008c8f4197f0fd30b8d1497fbef42ffea5 /net/base | |
parent | 9b1647cda2b71767b848fb5cc893747409731ef5 (diff) | |
download | chromium_src-3419fa77a302e13a42f783c2466c2fde91d4cd95.zip chromium_src-3419fa77a302e13a42f783c2466c2fde91d4cd95.tar.gz chromium_src-3419fa77a302e13a42f783c2466c2fde91d4cd95.tar.bz2 |
Measure DNS resolution waste from not always performing AF_UNSPEC lookups.
BUG=139811
Review URL: https://chromiumcodereview.appspot.com/10829191
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@151312 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/base')
-rw-r--r-- | net/base/host_resolver_impl.cc | 42 |
1 files changed, 40 insertions, 2 deletions
diff --git a/net/base/host_resolver_impl.cc b/net/base/host_resolver_impl.cc index e18a9e5..68b6bd5 100644 --- a/net/base/host_resolver_impl.cc +++ b/net/base/host_resolver_impl.cc @@ -1820,8 +1820,46 @@ bool HostResolverImpl::ServeFromCache(const Key& key, if (!info.allow_cached_response() || !cache_.get()) return false; - const HostCache::Entry* cache_entry = cache_->Lookup( - key, base::TimeTicks::Now()); + base::TimeTicks current_time = base::TimeTicks::Now(); + const HostCache::Entry* cache_entry = cache_->Lookup(key, current_time); + + { + bool found = cache_entry != NULL; + bool ipv4 = key.address_family == ADDRESS_FAMILY_IPV4; + // If we couldn't find the desired address family, check to see if the + // other family is in the cache, which indicates waste, and we should fix + // crbug.com/139811. + bool found_other_family = false; + if (!found && default_address_family_ == ADDRESS_FAMILY_UNSPECIFIED) { + Key other_family_key = key; + other_family_key.address_family = ipv4 ? + ADDRESS_FAMILY_UNSPECIFIED : ADDRESS_FAMILY_IPV4; + found_other_family = + cache_->Lookup(other_family_key, current_time) != NULL; + } + enum { // Used in HISTOGRAM_ENUMERATION. + CACHE_IPV4_ONLY_FOUND, + CACHE_IPV4_ONLY_MISS, + CACHE_FOUND_IPV4, + CACHE_FOUND_UNSPEC, + CACHE_WASTE_IPV4, + CACHE_WASTE_UNSPEC, + CACHE_MISS_IPV4, + CACHE_MISS_UNSPEC, + CACHE_MAX, // Bounding value. + } category = CACHE_MAX; + if (default_address_family_ != ADDRESS_FAMILY_UNSPECIFIED) { + category = found ? CACHE_IPV4_ONLY_FOUND : CACHE_IPV4_ONLY_MISS; + } else if (found) { + category = ipv4 ? CACHE_FOUND_IPV4 : CACHE_FOUND_UNSPEC; + } else if (found_other_family) { + category = ipv4 ? CACHE_WASTE_IPV4 : CACHE_WASTE_UNSPEC; + } else { + category = ipv4 ? CACHE_MISS_IPV4 : CACHE_MISS_UNSPEC; + } + UMA_HISTOGRAM_ENUMERATION("DNS.ResolveCacheCategory", category, CACHE_MAX); + } + if (!cache_entry) return false; |