summaryrefslogtreecommitdiffstats
path: root/net/base
diff options
context:
space:
mode:
authorpauljensen@chromium.org <pauljensen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-13 18:24:24 +0000
committerpauljensen@chromium.org <pauljensen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-13 18:24:24 +0000
commit3419fa77a302e13a42f783c2466c2fde91d4cd95 (patch)
treebd1ddd008c8f4197f0fd30b8d1497fbef42ffea5 /net/base
parent9b1647cda2b71767b848fb5cc893747409731ef5 (diff)
downloadchromium_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.cc42
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;