diff options
author | szym@chromium.org <szym@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-10 20:12:51 +0000 |
---|---|---|
committer | szym@chromium.org <szym@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-10 20:12:51 +0000 |
commit | 02cd6980fbc6180f5b87b97823a03be0df29b696 (patch) | |
tree | 373b2d5e1d895d1f442dcc1ee488a2bc6abd3dec /net | |
parent | 8c096e0a8e97626690858e375305b642d9e332e0 (diff) | |
download | chromium_src-02cd6980fbc6180f5b87b97823a03be0df29b696.zip chromium_src-02cd6980fbc6180f5b87b97823a03be0df29b696.tar.gz chromium_src-02cd6980fbc6180f5b87b97823a03be0df29b696.tar.bz2 |
[net/dns] Add per-address-family histograms AsyncDNS.ResolveSuccess_FAMILY_* and per-qtype histograms AsyncDNS.TransactionSuccess_*.
Currently observed AsyncDNS.ResolveSuccess (duration of DnsTask) is almost twice as long as AsyncDNS.TransactionSuccess (duration of DnsTransaction). This could be attributed to dual-stack resolutions which involve two DnsTransactions, but at the same time the difference between DNS.ResolveSuccess_FAMILY_IPV4 and ..._UNSPEC (duration of ProcTask) is much less pronounced suggesting that SystemDNS resolves names on dual-stack hosts differently than AsyncDNS.
This measurement will allow us to determine how much of the observed overhead of DnsTask over DnsTransaction can be attributed to dual-stack lookups.
BUG=169257
Review URL: https://codereview.chromium.org/11783076
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@176137 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net')
-rw-r--r-- | net/base/host_resolver_impl.cc | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/net/base/host_resolver_impl.cc b/net/base/host_resolver_impl.cc index c54bf9da..0a3e864 100644 --- a/net/base/host_resolver_impl.cc +++ b/net/base/host_resolver_impl.cc @@ -1016,17 +1016,24 @@ class HostResolverImpl::DnsTask : public base::SupportsWeakPtr<DnsTask> { int net_error, const DnsResponse* response) { DCHECK(transaction); + base::TimeDelta duration = base::TimeTicks::Now() - start_time; // Run |callback_| last since the owning Job will then delete this DnsTask. if (net_error != OK) { - DNS_HISTOGRAM("AsyncDNS.TransactionFailure", - base::TimeTicks::Now() - start_time); + DNS_HISTOGRAM("AsyncDNS.TransactionFailure", duration); OnFailure(net_error, DnsResponse::DNS_PARSE_OK); return; } CHECK(response); - DNS_HISTOGRAM("AsyncDNS.TransactionSuccess", - base::TimeTicks::Now() - start_time); + DNS_HISTOGRAM("AsyncDNS.TransactionSuccess", duration); + switch (transaction->GetType()) { + case dns_protocol::kTypeA: + DNS_HISTOGRAM("AsyncDNS.TransactionSuccess_A", duration); + break; + case dns_protocol::kTypeAAAA: + DNS_HISTOGRAM("AsyncDNS.TransactionSuccess_AAAA", duration); + break; + } AddressList addr_list; base::TimeDelta ttl; DnsResponse::Result result = response->ParseToAddressList(&addr_list, &ttl); @@ -1470,6 +1477,18 @@ class HostResolverImpl::Job : public PrioritizedDispatcher::Job { return; } DNS_HISTOGRAM("AsyncDNS.ResolveSuccess", duration); + // Log DNS lookups based on |address_family|. + switch(key_.address_family) { + case ADDRESS_FAMILY_IPV4: + DNS_HISTOGRAM("AsyncDNS.ResolveSuccess_FAMILY_IPV4", duration); + break; + case ADDRESS_FAMILY_IPV6: + DNS_HISTOGRAM("AsyncDNS.ResolveSuccess_FAMILY_IPV6", duration); + break; + case ADDRESS_FAMILY_UNSPECIFIED: + DNS_HISTOGRAM("AsyncDNS.ResolveSuccess_FAMILY_UNSPEC", duration); + break; + } UmaAsyncDnsResolveStatus(RESOLVE_STATUS_DNS_SUCCESS); RecordTTL(ttl); |