Chromium Code Reviews| Index: net/base/host_resolver_impl.cc |
| diff --git a/net/base/host_resolver_impl.cc b/net/base/host_resolver_impl.cc |
| index d9e1aa2b7e79fa2e2eafe49c6e54f2ec36fee623..27bc0e5e3a1aa3cc76a3f19bfdd5f45729fdf834 100644 |
| --- a/net/base/host_resolver_impl.cc |
| +++ b/net/base/host_resolver_impl.cc |
| @@ -205,6 +205,10 @@ void RecordTotalTime(bool had_dns_config, |
| } |
| } |
| +void RecordTTL(base::TimeDelta ttl) { |
| + UMA_HISTOGRAM_CUSTOM_COUNTS("AsyncDNS.TTL", ttl.InSeconds(), 1, 86400, 100); |
| +} |
| + |
| //----------------------------------------------------------------------------- |
| // Wraps call to SystemHostResolverProc as an instance of HostResolverProc. |
| @@ -1464,12 +1468,7 @@ class HostResolverImpl::Job : public PrioritizedDispatcher::Job { |
| } |
| } |
| - 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, base::TimeDelta::FromSeconds(-1)); |
|
cbentzel
2012/10/11 18:27:30
At the point that the kNegativeCacheEntry/kCacheEn
|
| } |
| void StartDnsTask() { |
| @@ -1958,6 +1957,8 @@ bool HostResolverImpl::ServeFromCache(const Key& key, |
| *net_error = cache_entry->error; |
| if (*net_error == OK) { |
| + if (cache_entry->original_ttl >= base::TimeDelta()) |
| + RecordTTL(cache_entry->original_ttl); |
| *addresses = cache_entry->addrlist; |
| EnsurePortOnAddressList(info.port(), addresses); |
| } |
| @@ -2001,8 +2002,25 @@ void HostResolverImpl::CacheResult(const Key& key, |
| int net_error, |
| const AddressList& addr_list, |
| base::TimeDelta ttl) { |
| - if (cache_.get()) |
| - cache_->Set(key, net_error, addr_list, base::TimeTicks::Now(), ttl); |
| + bool have_ttl = (ttl >= base::TimeDelta()); |
| + if (!have_ttl) { |
| + if (net_error == OK) { |
| + ttl = base::TimeDelta::FromSeconds(kCacheEntryTTLSeconds); |
| + } else { |
| + ttl = base::TimeDelta::FromSeconds(kNegativeCacheEntryTTLSeconds); |
| + } |
| + } |
| + |
| + if (cache_.get()) { |
| + HostCache::Entry* entry = cache_->Set( |
| + key, net_error, addr_list, base::TimeTicks::Now(), ttl); |
| + if (have_ttl) { |
| + RecordTTL(ttl); |
| + entry->original_ttl = ttl; |
| + } else { |
| + entry->original_ttl = base::TimeDelta::FromSeconds(-1); |
| + } |
| + } |
| } |
| void HostResolverImpl::RemoveJob(Job* job) { |