Narrow the instrumentation to track jank in HostResolverImpl.

I am fairly confident this is coming from IsGloballyReachable(), which seems to have a dependency on UDP sockets, so focused the instrumentation there.

One weakness of this instrumentation is it doesn't separate out some of the non-trivial work being done by local variable's destructors (most notably deletion of the UDP sockets, which will likely be hitting issue 165382).

BUG=455942
TBR=pkasting@chromium.org

Review URL: https://codereview.chromium.org/1120733002

Cr-Commit-Position: refs/heads/master@{#327831}
diff --git a/net/dns/host_resolver_impl.cc b/net/dns/host_resolver_impl.cc
index 141f7f8..6cf01c7 100644
--- a/net/dns/host_resolver_impl.cc
+++ b/net/dns/host_resolver_impl.cc
@@ -185,19 +185,33 @@
 // Attempts to connect a UDP socket to |dest|:53.
 bool IsGloballyReachable(const IPAddressNumber& dest,
                          const BoundNetLog& net_log) {
+  // TODO(eroman): Remove ScopedTracker below once crbug.com/455942 is fixed.
+  tracked_objects::ScopedTracker tracking_profile_1(
+      FROM_HERE_WITH_EXPLICIT_FUNCTION(
+          "455942 IsGloballyReachable (create udp socket)"));
+
   scoped_ptr<DatagramClientSocket> socket(
       ClientSocketFactory::GetDefaultFactory()->CreateDatagramClientSocket(
           DatagramSocket::DEFAULT_BIND,
           RandIntCallback(),
           net_log.net_log(),
           net_log.source()));
+  // TODO(eroman): Remove ScopedTracker below once crbug.com/455942 is fixed.
+  tracked_objects::ScopedTracker tracking_profile_2(
+      FROM_HERE_WITH_EXPLICIT_FUNCTION("455942 IsGloballyReachable (connect)"));
   int rv = socket->Connect(IPEndPoint(dest, 53));
   if (rv != OK)
     return false;
+  tracked_objects::ScopedTracker tracking_profile_3(
+      FROM_HERE_WITH_EXPLICIT_FUNCTION(
+          "455942 IsGloballyReachable (get local addr)"));
   IPEndPoint endpoint;
   rv = socket->GetLocalAddress(&endpoint);
   if (rv != OK)
     return false;
+  tracked_objects::ScopedTracker tracking_profile_4(
+      FROM_HERE_WITH_EXPLICIT_FUNCTION(
+          "455942 IsGloballyReachable (remainder)"));
   DCHECK_EQ(ADDRESS_FAMILY_IPV6, endpoint.GetFamily());
   const IPAddressNumber& address = endpoint.address();
   bool is_link_local = (address[0] == 0xFE) && ((address[1] & 0xC0) == 0x80);
@@ -1887,11 +1901,17 @@
 
   LogStartRequest(source_net_log, info);
 
+  tracked_objects::ScopedTracker tracking_profile_1a(
+      FROM_HERE_WITH_EXPLICIT_FUNCTION("455942 HostResolverImpl::Resolve 1a"));
+
   IPAddressNumber ip_number;
   IPAddressNumber* ip_number_ptr = nullptr;
   if (ParseIPLiteralToNumber(info.hostname(), &ip_number))
     ip_number_ptr = &ip_number;
 
+  tracked_objects::ScopedTracker tracking_profile_1b(
+      FROM_HERE_WITH_EXPLICIT_FUNCTION("455942 HostResolverImpl::Resolve 1b"));
+
   // Build a key that identifies the request in the cache and in the
   // outstanding jobs map.
   Key key = GetEffectiveKeyForRequest(info, ip_number_ptr, source_net_log);
@@ -1907,27 +1927,16 @@
     return rv;
   }
 
-  // TODO(eroman): Remove ScopedTracker below once crbug.com/455942 is fixed.
-  tracked_objects::ScopedTracker tracking_profile_3(
-      FROM_HERE_WITH_EXPLICIT_FUNCTION("455942 HostResolverImpl::Resolve 3"));
-
   // Next we need to attach our request to a "job". This job is responsible for
   // calling "getaddrinfo(hostname)" on a worker thread.
 
   JobMap::iterator jobit = jobs_.find(key);
   Job* job;
   if (jobit == jobs_.end()) {
-    // TODO(eroman): Remove ScopedTracker below once crbug.com/455942 is fixed.
-    tracked_objects::ScopedTracker tracking_profile_4(
-        FROM_HERE_WITH_EXPLICIT_FUNCTION("455942 HostResolverImpl::Resolve 4"));
     job =
         new Job(weak_ptr_factory_.GetWeakPtr(), key, priority, source_net_log);
     job->Schedule(false);
 
-    // TODO(eroman): Remove ScopedTracker below once crbug.com/455942 is fixed.
-    tracked_objects::ScopedTracker tracking_profile_5(
-        FROM_HERE_WITH_EXPLICIT_FUNCTION("455942 HostResolverImpl::Resolve 5"));
-
     // Check for queue overflow.
     if (dispatcher_->num_queued_jobs() > max_queued_jobs_) {
       Job* evicted = static_cast<Job*>(dispatcher_->EvictOldestLowest());
@@ -1944,10 +1953,6 @@
     job = jobit->second;
   }
 
-  // TODO(eroman): Remove ScopedTracker below once crbug.com/455942 is fixed.
-  tracked_objects::ScopedTracker tracking_profile_6(
-      FROM_HERE_WITH_EXPLICIT_FUNCTION("455942 HostResolverImpl::Resolve 6"));
-
   // Can't complete synchronously. Create and attach request.
   scoped_ptr<Request> req(new Request(
       source_net_log, info, priority, callback, addresses));