diff options
author | szym@chromium.org <szym@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-17 08:39:43 +0000 |
---|---|---|
committer | szym@chromium.org <szym@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-17 08:39:43 +0000 |
commit | 1339a2a21493c04b3ef96b15d1c8172fd9fffeea (patch) | |
tree | c632470d9e384ad009ef402d4617bfb4a06c3833 /net/base/host_resolver_impl.cc | |
parent | e9cf0e565201961515daf683241dd511dfe08fd2 (diff) | |
download | chromium_src-1339a2a21493c04b3ef96b15d1c8172fd9fffeea.zip chromium_src-1339a2a21493c04b3ef96b15d1c8172fd9fffeea.tar.gz chromium_src-1339a2a21493c04b3ef96b15d1c8172fd9fffeea.tar.bz2 |
[net] Add AsyncDNS.TTL histogram.
Counts of TTL obtained in DNS response. Counted when the address is used.
Review URL: https://chromiumcodereview.appspot.com/11065052
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@162329 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/base/host_resolver_impl.cc')
-rw-r--r-- | net/base/host_resolver_impl.cc | 51 |
1 files changed, 33 insertions, 18 deletions
diff --git a/net/base/host_resolver_impl.cc b/net/base/host_resolver_impl.cc index d9e1aa2..7f785b2 100644 --- a/net/base/host_resolver_impl.cc +++ b/net/base/host_resolver_impl.cc @@ -205,6 +205,12 @@ void RecordTotalTime(bool had_dns_config, } } +void RecordTTL(base::TimeDelta ttl) { + UMA_HISTOGRAM_CUSTOM_TIMES("AsyncDNS.TTL", ttl, + base::TimeDelta::FromSeconds(1), + base::TimeDelta::FromDays(1), 100); +} + //----------------------------------------------------------------------------- // Wraps call to SystemHostResolverProc as an instance of HostResolverProc. @@ -1331,7 +1337,7 @@ class HostResolverImpl::Job : public PrioritizedDispatcher::Job { // If we were called from a Request's callback within CompleteRequests, // that Request could not have been cancelled, so num_active_requests() // could not be 0. Therefore, we are not in CompleteRequests(). - CompleteRequests(OK, AddressList(), base::TimeDelta()); + CompleteRequestsWithError(OK /* cancelled */); } } @@ -1339,7 +1345,7 @@ class HostResolverImpl::Job : public PrioritizedDispatcher::Job { // and destroys the job. void Abort() { DCHECK(is_running()); - CompleteRequests(ERR_ABORTED, AddressList(), base::TimeDelta()); + CompleteRequestsWithError(ERR_ABORTED); } // Called by HostResolverImpl when this job is evicted due to queue overflow. @@ -1352,9 +1358,7 @@ class HostResolverImpl::Job : public PrioritizedDispatcher::Job { net_log_.AddEvent(NetLog::TYPE_HOST_RESOLVER_IMPL_JOB_EVICTED); // This signals to CompleteRequests that this job never ran. - CompleteRequests(ERR_HOST_RESOLVER_QUEUE_TOO_LARGE, - AddressList(), - base::TimeDelta()); + CompleteRequestsWithError(ERR_HOST_RESOLVER_QUEUE_TOO_LARGE); } // Attempts to serve the job from HOSTS. Returns true if succeeded and @@ -1366,7 +1370,7 @@ class HostResolverImpl::Job : public PrioritizedDispatcher::Job { requests_.front()->info(), &addr_list)) { // This will destroy the Job. - CompleteRequests(OK, addr_list, base::TimeDelta()); + CompleteRequests(OK, addr_list, base::TimeDelta(), false /* true_ttl */); return true; } return false; @@ -1464,12 +1468,12 @@ class HostResolverImpl::Job : public PrioritizedDispatcher::Job { } } - base::TimeDelta ttl = base::TimeDelta::FromSeconds( - kNegativeCacheEntryTTLSeconds); + base::TimeDelta ttl = + base::TimeDelta::FromSeconds(kNegativeCacheEntryTTLSeconds); if (net_error == OK) ttl = base::TimeDelta::FromSeconds(kCacheEntryTTLSeconds); - CompleteRequests(net_error, addr_list, ttl); + CompleteRequests(net_error, addr_list, ttl, false /* true_ttl */); } void StartDnsTask() { @@ -1509,14 +1513,16 @@ class HostResolverImpl::Job : public PrioritizedDispatcher::Job { } UmaAsyncDnsResolveStatus(RESOLVE_STATUS_DNS_SUCCESS); + RecordTTL(ttl); - CompleteRequests(net_error, addr_list, ttl); + CompleteRequests(net_error, addr_list, ttl, true /* true_ttl */); } // Performs Job's last rites. Completes all Requests. Deletes this. void CompleteRequests(int net_error, const AddressList& addr_list, - base::TimeDelta ttl) { + base::TimeDelta ttl, + bool true_ttl) { CHECK(resolver_); // This job must be removed from resolver's |jobs_| now to make room for a @@ -1527,8 +1533,7 @@ class HostResolverImpl::Job : public PrioritizedDispatcher::Job { resolver_->RemoveJob(this); - // |addr_list| will be destroyed once we destroy |proc_task_| and - // |dns_task_|. + // |addr_list| will be destroyed with |proc_task_| and |dns_task_|. AddressList list = addr_list; if (is_running()) { @@ -1568,8 +1573,12 @@ class HostResolverImpl::Job : public PrioritizedDispatcher::Job { bool did_complete = (net_error != ERR_ABORTED) && (net_error != ERR_HOST_RESOLVER_QUEUE_TOO_LARGE); - if (did_complete) - resolver_->CacheResult(key_, net_error, list, ttl); + if (did_complete) { + HostCache::Entry entry = true_ttl ? + HostCache::Entry(net_error, list, ttl) : + HostCache::Entry(net_error, list); + resolver_->CacheResult(key_, entry, ttl); + } // Complete all of the requests that were attached to the job. for (RequestsList::const_iterator it = requests_.begin(); @@ -1597,6 +1606,11 @@ class HostResolverImpl::Job : public PrioritizedDispatcher::Job { } } + // Convenience wrapper for CompleteRequests in case of failure. + void CompleteRequestsWithError(int net_error) { + CompleteRequests(net_error, AddressList(), base::TimeDelta(), false); + } + RequestPriority priority() const { return priority_tracker_.highest_priority(); } @@ -1958,6 +1972,8 @@ bool HostResolverImpl::ServeFromCache(const Key& key, *net_error = cache_entry->error; if (*net_error == OK) { + if (cache_entry->has_ttl()) + RecordTTL(cache_entry->ttl); *addresses = cache_entry->addrlist; EnsurePortOnAddressList(info.port(), addresses); } @@ -1998,11 +2014,10 @@ bool HostResolverImpl::ServeFromHosts(const Key& key, } void HostResolverImpl::CacheResult(const Key& key, - int net_error, - const AddressList& addr_list, + const HostCache::Entry& entry, base::TimeDelta ttl) { if (cache_.get()) - cache_->Set(key, net_error, addr_list, base::TimeTicks::Now(), ttl); + cache_->Set(key, entry, base::TimeTicks::Now(), ttl); } void HostResolverImpl::RemoveJob(Job* job) { |